1. 程式人生 > >shiroWeb項目-授權(十一)

shiroWeb項目-授權(十一)

dwz fwe apc mrc ebr omr use jks lod

使用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; }

shiroWeb項目-授權(十一)