權限項目總結(四) shiro 授權
概述
Authorization(授權):不難理解,授權就是用來控制當前訪問用戶在訪問系統資源權限。
這個詞也做證書的解釋,從證書這個角度來講,推斷是否擁有對資源訪問的權限時。當前用戶須要提供證書。
授權的核心
用戶—角色—權限,以角色為中心。普通情況將權限分配給某個角色。然後給用戶分配某個權限或是一組權限。
主要的流程
當前用戶調用isPermitted方法,攜帶著當前用戶訪問資源的路徑,通常是字符串或者是集合。
調用自己定義的Realm類的重寫方法 doGetAuthorizationInfo(PrincipalCollection principals) 這裏將獲取當前用戶的權限數據。能夠是.ini 文件,也能夠是從數據庫中查詢。
調用 AuthorizingRealm 類的 getAuthorizationInfo(PrincipalCollection principals) 方法得到角色的權限。內部最後通過 isPermitted(PrincipalCollection principals, String permission) 遍歷驗證。
看看最後驗證權限的方法,也沒有想象中那麽復雜。
public boolean isPermitted(PrincipalCollection principals, String permission) { assertRealmsConfigured(); for (Realm realm : getRealms()) { if (!(realm instanceof Authorizer)) continue; if (((Authorizer) realm).isPermitted(principals, permission)) { return true; } } return false; }
Shiro三種方式實現授權
1:編寫代碼——在Java 代碼中用像if 和else 塊的結構運行授權檢查。
@RequestMapping(params = "myjsp") public String home() { Subject currentUser = SecurityUtils.getSubject(); if(currentUser.isPermitted("user.do?
myjsp")){ return "my"; }else{ return "error/noperms"; } }
2:JDK 的註解——你能夠加入授權註解給你的 Java 方法。
@RequiresAuthentication要求當前用戶已經認證通過,才幹運行該方法
@RequiresGuest session中沒有權限
@RequiresPermissions 要求當前用戶認證後擁有多個權限
@RequiresRoles(“administrator”) 要求用戶擁有(“administrator”)權限
@RequiresUser 要求subject為存在於當前系統中的用戶
3:JSP/GSP 標簽庫——你能夠控制基於角色和權限的JSP 或者GSP 頁面輸出。
<shiro:authenticated>
<a>已通過認證的用戶才幹</a>
</shiro:authenticated>
權限項目總結(四) shiro 授權