標籤:acm nil apr oql gpm usb cbe class eth
使用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項目-授權(十一)