Shiro學習筆記(四) shiro實現授權

2021-10-02 15:29:54 字數 3564 閱讀 5859

授權,也叫訪問控制,即在應用中控制誰能訪問哪些資源(如訪問頁面/編輯資料/頁面操作等)。

在授權中需了解的幾個關鍵物件:主體(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 基於證書驗證方...