使用SpringSecurity實(shí)現(xiàn)細(xì)化權(quán)限粒度的方法-創(chuàng)新互聯(lián)

本篇文章給大家分享的是有關(guān)使用Spring Security實(shí)現(xiàn)細(xì)化權(quán)限粒度的方法,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

延長網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),延長網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為延長1000多家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢,請找那個(gè)售后服務(wù)好的延長做網(wǎng)站的公司定做!

1.權(quán)限管理模型

要想將細(xì)化權(quán)限粒度,我們不可避免會(huì)涉及到一些權(quán)限模型,例如 ACL、RBAC、DAC、MAC 以及 ABAC、PBAC 等。

在這些眾多的權(quán)限模型中,我們使用較多的是 RBAC,ACL 也有一些項(xiàng)目在使用,另外幾種則使用相對較少。因此松哥這里重點(diǎn)和大家介紹 ACL 和 RBAC。

1.1 ACL

ACL 是一種比較古老的權(quán)限控制模型。英文全稱是 Access Control List,中文稱作訪問控制列表,這是一種面向資源的訪問控制模型,所有的權(quán)限配置都是針對資源的。

它的原理是這樣:

對于系統(tǒng)中的每一個(gè)資源,都會(huì)配置一個(gè)訪問列表,這個(gè)列表中記錄了用戶/角色對于資源的 CURD 權(quán)限,當(dāng)系統(tǒng)需要訪問這些資源時(shí),會(huì)首先檢查列表中是否存在當(dāng)前用戶的訪問權(quán)限,進(jìn)而確定當(dāng)前用戶是否可以執(zhí)行相應(yīng)的操作。

ACL 的使用非常簡單,搞明白它的原理自己分分鐘就能實(shí)現(xiàn)。但是 ACL 有一個(gè)明顯的缺點(diǎn),就是需要維護(hù)大量的訪問權(quán)限列表。大量的訪問控制列表帶來的問題就是性能下降以及維護(hù)復(fù)雜。

1.2 RBAC

RBAC(Role-based access control)是一種以角色為基礎(chǔ)的訪問控制,也是目前使用較多的一種權(quán)限模型,它有多種不同的變體,松哥后面會(huì)專門寫一篇文章來介紹 RBAC,這里僅簡單科普下。

RBAC 權(quán)限模型將用戶按角色進(jìn)行歸類,通過用戶的角色來確定用戶對某項(xiàng)資源是否具備操作權(quán)限。RBAC 簡化了用戶與權(quán)限的管理,它將用戶與角色關(guān)聯(lián)、角色與權(quán)限管理、權(quán)限與資源關(guān)聯(lián),這種模式使得用戶的授權(quán)管理變得非常簡單和易于維護(hù)。

1.3 其他

下面這些使用常見較少,小伙伴們做一個(gè)了解即可,感興趣的小伙伴也可以自行研究下。

  • ABAC:這是一種基于屬性的訪問控制。
  • PBAC:這是一種基于策略的訪問控制。
  • DAC:除了權(quán)限控制,主體也可以將權(quán)限授予其他主體。
  • MAC:資源可以被哪些類別的主體進(jìn)行哪些操作,主體可以對哪些等級的資源進(jìn)行哪些操作,這兩個(gè)條件同時(shí)滿足時(shí),允許訪問。

2.ACL

接下來松哥要和大家仔細(xì)介紹一下 ACL 這種權(quán)限模型,RBAC 我后面專門寫文章介紹,本文先不做討論。

Acl 的全稱是 Access Control List,也就是我們所說的訪問控制列表,是用以控制對象的訪問權(quán)限的。Acl 的一個(gè)核心思路就是將某個(gè)對象的某種權(quán)限授予某個(gè)用戶或某種角色,它們之間的關(guān)系是多對多,即一個(gè)用戶/角色可以具備某個(gè)對象的多種權(quán)限,某個(gè)對象的權(quán)限也可以被多個(gè)用戶/角色所持有。

舉個(gè)簡單例子:

現(xiàn)在有一個(gè) User 對象,針對該對象有查詢、修改、刪除等權(quán)限,可以將這些權(quán)限賦值給某一個(gè)用戶,也可以將這些權(quán)限賦值給某一個(gè)角色,當(dāng)用戶具備這些角色時(shí)就具有執(zhí)行相應(yīng)操作的權(quán)限。

從這個(gè)角度看,Acl 是一種粒度非常細(xì)的權(quán)限控制,它就是專門控制某一個(gè)對象的操作權(quán)限。所有的這些權(quán)限都記錄在數(shù)據(jù)庫中,這帶來了另外一個(gè)問題就是需要維護(hù)的權(quán)限數(shù)據(jù)量非常龐大,不利于后期擴(kuò)展。當(dāng)然,對于一個(gè)簡單的系統(tǒng),使用 Acl 還是可以的,沒有任何問題。

2.1 核心概念

接下來我們來看看 Acl 中一些核心概念。

Sid

Sid 代表了用戶和角色,它有兩種:GrantedAuthoritySid 和 PrincipalSid,前者代表角色,后者代表用戶。在 Spring Security 中,用戶和角色信息都是保存在 Authentication 對象中的,即 Sid 是從 Authentication 對象中提取出來的,提取出來的值是 GrantedAuthoritySid+PrincipalSid,而不是其中某一項(xiàng),具體的提取方法是 SidRetrievalStrategyImpl#getSids,相關(guān)源碼如下:

public List<Sid> getSids(Authentication authentication) {
	Collection<&#63; extends GrantedAuthority> authorities = roleHierarchy
			.getReachableGrantedAuthorities(authentication.getAuthorities());
	List<Sid> sids = new ArrayList<>(authorities.size() + 1);
	sids.add(new PrincipalSid(authentication));
	for (GrantedAuthority authority : authorities) {
		sids.add(new GrantedAuthoritySid(authority));
	}
	return sids;
}

當(dāng)前名稱:使用SpringSecurity實(shí)現(xiàn)細(xì)化權(quán)限粒度的方法-創(chuàng)新互聯(lián)
URL分享:http://muchs.cn/article18/dscpdp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、軟件開發(fā)、定制網(wǎng)站App開發(fā)、網(wǎng)站收錄、品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)