shiroWeb項目-授權(十一)

 使用PermissionsAuthorizationFilter

在applicationContext-shiro.xml中配置url所對應的權限。

測試流程:

1、在applicationContext-shiro.xml中配置filter規則

         <!--商品查詢需要商品查詢權限  -->

   /items/queryItems.action = perms[item:query]

2、用戶在認證通過後,請求/items/queryItems.action

3、被PermissionsAuthorizationFilter攔截,發現需要“item:query”權限

4、PermissionsAuthorizationFilter調用realm中的doGetAuthorizationInfo獲取數據庫中正確的權限

5、PermissionsAuthorizationFilter對item:query 和從realm中獲取權限進行對比,如果“item:query”在realm返回的權限列表中,授權通過。

創建refuse.jsp

如果授權失敗,跳轉到refuse.jsp,需要在spring容器中配置:

 

Realm中進行授權

 

// 用於授權
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {

        // 從 principals獲取主身份信息
        // 將getPrimaryPrincipal方法返回值轉爲真實身份類型(在上邊的doGetAuthenticationInfo認證通過填充到SimpleAuthenticationInfo中身份類型),
        ActiveUser activeUser = (ActiveUser) principals.getPrimaryPrincipal();

        // 根據身份信息獲取權限信息
        // 從數據庫獲取到權限數據
        List<SysPermission> permissionList = null;
        try {
            permissionList = sysService.findPermissionListByUserId(activeUser.getUserid());
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        // 單獨定一個集合對象
        List<String> permissions = new ArrayList<String>();
        if (permissionList != null) {
            for (SysPermission sysPermission : permissionList) {
                // 將數據庫中的權限標籤 符放入集合
                permissions.add(sysPermission.getPercode());
            }
        }

        // 查到權限數據,返回授權信息(要包括 上邊的permissions)
        SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
        // 將上邊查詢到授權信息填充到simpleAuthorizationInfo對象中
        simpleAuthorizationInfo.addStringPermissions(permissions);

        return simpleAuthorizationInfo;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章