1. 程式人生 > >權限項目總結(四) shiro 授權

權限項目總結(四) shiro 授權

oge als 註解 沒有 概述 當前 http ade ava

概述

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 授權