在實現shiro許可權時,一般是繼承authorizingrealm時,認證方法:
dogetauthenticationinfo(authenticationtoken token)
與授權方法:
dogetauthorizationinfo(principalcollection principals)
其中在授權方法中可以在authorizationinfo中新增許可權識別符號
addstringpermissions(collectionpermissions)
與角色資訊等.
那麼通過檢視原始碼可以得到,指定的許可權識別符號預設是使用
org.apache.shiro.authz.permission.wildcardpermissionresolver去解析建立成permission
在鑑權的過程中去進行許可權認證的.
public
class
wildcardpermissionresolver
implements
permissionresolver
}
也就是在預設情況下,我們的許可權識別符號是被wildcardpermission來實現解析認證的.
在檢視wildcardpermission原始碼中可以發現有3個標示符
public
class
wildcardpermission
implements
permission, serializable
wildcardpermission wp = (wildcardpermission) p;
list> otherparts = wp.getparts();
int i = 0;
for (setotherpart : otherparts) else
i++;}}
for (; i < getparts().size(); i++)
}return
true;
}}
許可權認證方法中可以看到,逐級比較':'分割槽的內容.
1.如果持有許可權分割槽長度大於需要的許可權分割槽長度且短分割槽能一一相匹配時,除非除非長分割槽後面
都是*這種統配符否則認證不通過.
例如:使用者使用者有許可權--> system:user:update
目標需要許可權 --> system:user
結果是認證失敗. 如果使用者的許可權是-->system:user:* 則可以通過
2.如果持有許可權的分割槽長度小於需要的許可權分割槽長度且短分割槽能一一相匹配時,直接認證通過.
例如:使用者使用者有許可權--> system:user
目標需要許可權 --> system:user:update
結果是認證成功.如果使用者許可權是-->system:user:* 則一樣能認證成功
3.如果包含子分割槽,則必須子分割槽必須被擁有子分割槽許可權全部包含才可認證通過.
例如:使用者擁有許可權 --> system:user:update,delete,add
目標需要許可權 --> system:user:update
結果是認證成功,反之則不行.
使用者擁有許可權 --> system:user,dict,config:update
目標需要許可權 --> system:user:delete
結果是認證成功
此外,如果想要定義自己的permission 可以通過實現
org.apache.shiro.authz.permission.permissionresolver介面中建立自定義的permssion實現類
並設定到realm中即可
c 標示符字首
字首 表示的型別 例子 a 陣列變數 ascore 50 b 布林變數 bflag,bisend c 字元變數 c n,i 整形變數 nwidth,inum x,y 無符號整形變數 x,y座標 xstart,ypos s 字串變數 不常使用 smyname sz 以0結束的字串變數 szmyname...
C 中 標示符
識別符號 identifier 是適用於變數 類 方法和其他各種使用者定義物件的一般術語。在編寫 時遵循命名規則,可以讓程式更加易懂 易讀 而且還能提供它的功能資訊,如它是否是乙個常量 包名或類等,這都有助於對程式的理解。識別符號是由一系列字元組成,其中包括大小寫字母 數字 下劃線 和 字元。識別符...
C 中 標示符
識別符號 identifier 是適用於變數 類 方法和其他各種使用者定義物件的一般術語。在編寫 時遵循命名規則,可以讓程式更加易懂 易讀 而且還能提供它的功能資訊,如它是否是乙個常量 包名或類等,這都有助於對程式的理解。識別符號是由一系列字元組成,其中包括大小寫字母 數字 下劃線 和 字元。識別符...