Spring Security的重要元件

2021-10-06 12:57:01 字數 3008 閱讀 2887

securitycontextholder

認證成功後的資訊由holder通過theadlocal機制(當然在不同的場景中,這裡可以切換到別的方式),儲存在securitycontext中。

authentication

將使用者提交的認證資訊進行封裝成authentication

theauthenticationcontains:

authenticationmanager

負責對封裝的使用者資訊進行校驗(即認證處理)

介面

//認證統一介面

public

inte***ce

authenticationmanager

預設實現類
//預設實現類

public

class

providermanager

implements

authenticationmanager

, messagesourceaware,

initializingbean

public

providermanager

(list

providers,

authenticationmanager parent)

authenticationprovider

具體處理認證邏輯的抽象介面

介面

//具體處理認證邏輯的抽象介面

public

inte***ce

authenticationprovider

authenticationmanagerauthenticationprovider都提供了認證介面,但是具體的處理邏輯由authenticationprovider的例項來處理,authenticationmanager只作為入口。

原始碼細節:

//關鍵**擷取

for(authenticationprovider provider :

getproviders()

)try

}}

public authentication authenticate

(authentication authentication)

throws authenticationexception

try}

catch

(accountstatu***ception e)

}}

accessdecisionmanager:
public

inte***ce

accessdecisionmanager

accessdecisionvoter:
boolean

supports

(configattribute attribute)

;boolean

supports

(class<

?> clazz)

;//authentication表示認證處理後,儲存的認證資訊

//object是需要判斷是否能獲取的資源

//configattribute 是用於access-control判斷的資訊,比如角色-url列表

intvote

(authentication authentication, s object,collection

attributes)

;

預設的處理類:只要返回積極響應即可

org.springframework.security.access.vote.affirmativebased

設計原理:

accessdecisionmanager是入口,然後具體是否有許可權是呼叫accessdecisionvoter進行判斷。

為什麼這樣設計?

因為這裡accessdecisionmanager有三個實現:

affirmativebased一種只要乙個voter返回有許可權即可。

consensusbased大多數voter返回有許可權,就說明有許可權

unconsensusbased要求必須所有的voter都返回或者棄權才行。

具體呼叫過程分析:
這裡decide方法被

org.springframework.security.web.access.intercept.filtersecurityinterceptor#invoke -》

org.springframework.security.access.intercept.abstractsecurityinterceptor#beforeinvocation

呼叫。

springboot中accessdecisionmanager的建立過程
abstractintercepturlconfigurercreate->

filtersecurityinterceptor ->

getaccessdecisionmanager ->

affirmativebased

原始碼展示
private filtersecurityinterceptor createfiltersecurityinterceptor

Spring Security結合CAS的配置

在我的幾個專案裡需要用到單點登入,我選用了cas,下面給出乙個一般性的spring security結合cas的配置檔案 附加說明 drop table if exists uc users create table uc users username varchar 32 not null,pas...

Spring Security的基本使用

是乙個能夠為基於 spring 的企業應用系統提供宣告式的安全訪問控制解決方案的安全框架。它提供了一組可以在 spring 應用上下文中配置的 bean,充分利用了 spring ioc,di 控制反轉 inversion of control di dependencyinjection 依賴注入...

Spring Security的基本使用

這個 會把過濾到請求自動轉到 springsecurityfilterchain 這個類裡面,這個是spring security的乙個處理類 這個過濾器要配置 springsecurityfilterchain 這裡的name固定要是springsecurityfilterchain,因為他是se...