授權,也叫訪問控制,即在應用中控制誰能訪問哪些資源(如訪問頁面/編輯資料/頁面操作等)。
在授權中需了解的幾個關鍵物件:主體(subject)、資源(resource)、許可權(permission)、 角色(role)
subject 發起請求,判斷是否具有相應的角色或許可權
securitymanager 委託給authorizer
authorizer 授權器
realm 查詢角色和許可權資訊
[users]
# 使用者zhang的密碼是zs,此使用者具有role1和role2兩個角色
zhangsan = zs, role1, role2
# 使用者wang的密碼是123,此使用者具有role2角色
wang = 123, role2
# 許可權
[roles]
# 角色role1對資源user擁有create、update許可權
role1 = user:create, user:update
# 角色role2對資源user擁有create、delete許可權
role2 = user:create, user:delete
# 角色role3對資源user擁有create許可權
role3 = user:create
角色許可權的配置規則: 角色=許可權1,許可權2許可權識別符號號規則:== 資源識別符號:操作:例項id==user:create:01 表示擁有對user資源的01例項進行create操作的許可權。
user:create:* 表示擁有對user資源進行create操作的許可權,對所有使用者資源例項進行create操作。 簡寫:user:update
user:* : * 表示擁有user資源的所有操作許可權。簡寫 user 或 user:*(推薦)
*:insert: * 表示擁有對所有資源插入的許可權。簡寫 *:insert
user:*:01 表示擁有對user資源例項01進行所有操作的許可權
user:insert,user:update 簡寫 user:insert,update
subject.hasrole(「」); 判斷是否有角色
boolean hasrole = subject.
hasrole
("role1"
); system.out.
println
(hasrole);
subject.hashroles(list);分別判斷使用者是否具有list中每個內容
boolean
hasroles = subject.
hasroles
(arrays.
aslist
("role1"
,"role2"
));
system.out.
println
(arrays.
tostring
(hasroles)
);
subject.hasallroles(collection);返回boolean,要求引數中所有角色使用者都需要具有.
boolean hasallroles = subject.
hasallroles
(arrays.
aslist
("role1"
,"role2"
));
system.out.
println
(hasallroles);
subject.ispermitted(「」);判斷是否具有許可權.
boolean permitted = subject.
ispermitted
("role1:update"
); system.out.
println
(permitted);
subject.ispermitted(list);分別判斷使用者是否具有list中每個許可權
boolean
permitted1 = subject.
ispermitted
("role1:view"
,"role2:view"
); system.out.
println
(arrays.
tostring
(permitted1)
);
subject.ispermittedall(collection);返回boolean,要求引數中所有許可權都需要具有.
boolean permittedall = subject.
ispermittedall
("role1:view"
,"role2:view"
); system.out.
println
(permittedall);
從以上的**中可以看出我們的使用者,密碼,角色,許可權都是在shrio.ini裡面配置的,但是實際開發中肯定不是這樣的,實際開發中我們的所有資料都是從資料庫裡面來的,如何實現呢,那就要使用資料和+自定義realm
/**
* 自定義realm實現
*/public
class
userrealm
extends
authorizingrealm
//用於認證
@override
protected authenticationinfo dogetauthenticationinfo
(authenticationtoken token)
throws authenticationexception
//用於授權
@override
protected authorizationinfo dogetauthorizationinfo
(principalcollection principals)
return ******authorizationinfo;
}}
shiro.ini
# 自定義realm
userrealm = com.tuojun.realm.userrealm
# 將realm設定到securitymanager
securitymanager.realms =
$userrealm
Shiro學習筆記之Shiro加密
雜湊演算法一般用於生成資料的摘要資訊,是一種不可逆的演算法,一般適合儲存密碼之類的資料,常見的雜湊演算法如 md5 sha 等。一般進行雜湊時最好提供乙個 雜訊,這樣可以使破解密碼的難度變大。以下是md5加密演算法的乙個演示 public class tes 5 此介面提供加密密碼和驗證密碼的功能。...
Shiro 學習筆記(一) shiro簡介
apache shiro 是乙個安全框架。說白了,就是進行一下 許可權校驗,判斷下這個使用者是否登入了,是否有許可權去做這件事情。shiro 可以幫助我們完成 認證 授權 加密 會話管理 與web 整合 快取等。其基本功能點 如下圖 authentication 身份認證 登入,驗證使用者是不是擁有...
Shiro學習筆記
shiro 許可權選單框架.apache shiro是乙個強大而靈活的開源安全框架,它能夠乾淨利落地處理身份認證,授權,企業會話管理和加密。使用者認證 使用者認證,使用者去訪問系統,系統要驗證使用者身份的合法性。最常用的使用者身份驗證的方法 1 使用者名稱密碼方式 2 指紋打卡機 3 基於證書驗證方...