shiroWeb項目-授權(十一)
阿新 • • 發佈:2017-07-29
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項目-授權(十一)