Shiro簡單授權原理分析

2021-07-26 15:23:15 字數 3441 閱讀 9559

shiro授權簡單來說分為兩種型別:

粗粒度的:也就是**中直接寫入和角色的繫結。

細粒度的:**中寫入的是和許可權的繫結,而角色到許可權和可配置的。

對於粗粒度來說,若角色對應許可權有改變的話,那麼則需要更改**,很不方便。而細粒度的好處顯而易見,所以一般專案中應該都採用細粒度的許可權配置。

那麼shiro中是如何來完成許可權檢驗的呢?

通過呼叫subject.hasroles(...)subject.ispermitted(...)

另外還有subject.checkroles(...)subject.checkpermissions(...)

前兩種和後兩種的區別是,後兩種在沒有許可權時會丟擲異常。

關於角色,相信你都會定義,因為就是乙個名字,比如admin、vip、user等。

而對於許可權的定義,就需要有一套規則了。在shiro中我們可以這麼來定義許可權字串:資源識別符號:操作:物件例項id。另外這裡支援萬用字元配置,

比如:

user:create表示對usercreate的許可權(這裡省略了:物件例項id,等價於user:create:*

user:*表示對user擁有所有操作的許可權(create,update,delete,view)

user:view:1表示對user的1例項有view的許可權

差不多就類似這樣,就不多說了。shiro內部會有乙個permissionresolver來負責將這類字串解析為permission物件。

下面分析一下授權的流程:

當我們呼叫subject.hasrole(...)

首先會委託給securitymanager來處理,而securitymanager內部有乙個authorizer來做真正的授權,預設實現為modularrealmauthorizermodularrealmauthorizer可以根據多個realm來判斷是否擁有相應的角色,其中只要某個realm匹配,則返回true

authorizingrealm對於判斷hasrole的邏輯也很簡單

protected

boolean

hasrole

(string

roleidentifier

,authorizationinfo

info

)

而對於subject.ispermitted(...)稍微會顯得複雜一些,前三步都一樣,就是authorizingrealm對於判斷ispermitted的邏輯稍微有點不一樣。它會先將許可權字串轉換成permission,將使用者的許可權轉換成list,這裡的list由三個部分組成:

jdbcrealm的實現是使用了stringpermissions,可能第一想法以為它是用了rolepermissionresolver吧。

好了,接下來,用permissionlist進行匹配,其中遍歷使用者許可權的匹配方法就是implies(...),這個單詞可以理解成「蘊含」的意思,這樣就比較好理解了。

private

boolean

ispermitted

(permission

permission

,authorizationinfo

info)}

}return

false

;}

舉個例子,比如user:*許可權impliesuser:create許可權,這就是一種蘊含關係。

一般有程式設計式和宣告式兩種:

}當然對於程式設計式的也可以直接使用subject.checkroles(「admin」),這樣一來也會丟擲異常並被exceptionhandler捕獲了。

這裡若啟用宣告式的鑑權,還需要啟用aspectj自動**,並支援對類的**。

proxy-target-

class

="true"

/>

class

="org.apache.shiro.spring.security.interceptor.authorizationattributesourceadvisor"

>

<

property

name

="securitymanager"

ref=

"securitymanager"

/>

Shiro簡單授權原理分析

shiro授權簡單來說分為兩種型別 粗粒度的 也就是 中直接寫入和角色的繫結。細粒度的 中寫入的是和許可權的繫結,而角色到許可權和可配置的。對於粗粒度來說,若角色對應許可權有改變的話,那麼則需要更改 很不方便。而細粒度的好處顯而易見,所以一般專案中應該都採用細粒度的許可權配置。那麼shiro中是如何...

Shiro 認證與授權分析

使用者訪問系統資源時的認證流程如下 具體流程分析如下 1 系統呼叫subject的login方法將使用者資訊提交給securitymanager 2 securitymanager將認證操作委託給認證器物件authenticator 3 authenticator將身份資訊傳遞給realm。4 re...

Shiro入門(六)Shiro授權

本章講解shiro授權的相關知識 1.概念 authorization 授權,也就是授予使用者訪問某些資源的許可權。前提在於需要使用者通過登入驗證才可以進行授權。許可權 permit 表示某些功能,如按鈕的顯示,選單的訪問,資料的crud 角色 role 許可權的集合,比如管理員角色,其擁有訪問系統...