1.呼叫 subject.ispermitted*/hasrole*介面,其會委託給 securitymanager,而 securitymanager 接著會委託給 authorizer;
2.authorizer 是真正的授權者,會通過 permissionresolver 把字串轉換成相應的 permission 例項;在進行授權之前,其會呼叫相應的 realm 獲取 subject 相應的角色/許可權用於匹配傳入的角色/許可權;
3.authorizer 會判斷 realm 的角色/許可權是否和傳入的匹配,如果有多個 realm,會委託給modularrealmauthorizer進行迴圈判斷,如果匹配如 ispermitted*/hasrole* 會返回 true,否則返回 false 表示授權失敗。
一.modularrealmauthorizer進行多 realm 匹配流程時:
首先檢查相應的 realm 是否實現了實現了 authorizer;
如果實現了 authorizer,那麼接著呼叫其相應的 ispermitted*/hasrole* 介面進行匹配;如果有乙個 realm 匹配那麼將返回 true,否則返回 false。
二.如果 realm 進行授權的話,應該繼承 authorizingrealm,其流程是:
如果呼叫 hasrole*,則直接獲取 authorizationinfo.getroles() 與傳入的角色比較即可;首先如果呼叫如 ispermitted(「user:view」),首先通過permissionresolver將許可權字串轉換成相應的 permission 例項,預設使用wildcardpermissionresolver,即轉換為萬用字元的wildcardpermission;
通過 authorizationinfo.getobjectpermissions() 得到 permission 例項集合;通過 authorizationinfo.getstringpermissions() 得到字串集合並通過 permissionresolver 解析為 permission 例項;然後獲取使用者的角色,並通過rolepermissionresolver解析角色對應的許可權集合(預設沒有實現,可以自己提供);
接著呼叫 permission.implies(permission p) 逐個與傳入的許可權比較,如果有匹配的則返回 true,否則 false。
可以根據自己的需要配置解析方式。
shiro.ini檔案
[main]
#自定義authorizer(多個realme解析)
authorizer=org.apache
.shiro
.authz
.modularrealmauthorizer
#自定義permissionresolver
#permissionresolver=org.apache.shiro.authz.permission.wildcardpermissionresolver
permissionresolver=com
.github
.shiro
.permission
.mypermissionresolver
authorizer.permissionresolver=$permissionresolver
#自定義rolepermissionresolver
rolepermissionresolver=com
.github
.shiro
.permission
.myrolepermissionresolver
authorizer.rolepermissionresolver=$rolepermissionresolver
securitymanager.authorizer=$authorizer
1.繼承permission介面並重寫
boolean implies(permission p);
2.繼承permissionresolver並重寫
permission resolvepermission(string permissionstring);
3.繼承rolepermissionresolver
collection resolvepermissionsinrole(string rolestring);
grafana的使用者及許可權的配置
在上幾篇文章中,已經在grafana中,配置了幾個dashboard。需要給開發人員檢視,但是我又不想讓開發人員,隨便更改dashboard中的配置。需要建立乙個唯讀賬號才行。點選新增使用者的圖示 點選invite 進行邀請 email or username 輸入使用者郵箱,注意 必須是郵箱格式。...
grafana的使用者及許可權的配置
在grafana中,配置了幾個dashboard,需要給開發人員檢視,但是又不想讓開發人員隨便更改dashboard中的配置。需要建立乙個唯讀賬號就行。點選新增使用者的圖示 點選invite 進行邀請 email or username 輸入使用者郵箱,注意 必須是郵箱格式。name 輸入使用者名稱...
webstorm配置less解析的方法及注意事項
一 準備 二 配置步驟 1 安裝js解析器node.js。直接下一步就ok了。2 將npm壓縮包解壓,找到裡面的lessc.cmd檔案,放到c盤下乙個沒有中文路徑的目錄下,我們假如是 c xampp htdocs tools npm 3 3.1 開啟webstorm file settings to...