securitycontextholder
認證成功後的資訊由holder通過theadlocal機制(當然在不同的場景中,這裡可以切換到別的方式),儲存在securitycontext中。
authentication
將使用者提交的認證資訊進行封裝成authentication
theauthentication
contains:
authenticationmanager
負責對封裝的使用者資訊進行校驗(即認證處理)
介面
//認證統一介面
public
inte***ce
authenticationmanager
預設實現類//預設實現類
public
class
providermanager
implements
authenticationmanager
, messagesourceaware,
initializingbean
public
providermanager
(list
providers,
authenticationmanager parent)
authenticationprovider
具體處理認證邏輯的抽象介面
介面
//具體處理認證邏輯的抽象介面
public
inte***ce
authenticationprovider
authenticationmanager
和authenticationprovider
都提供了認證介面,但是具體的處理邏輯由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方法被springboot中accessdecisionmanager的建立過程org.springframework.security.web.access.intercept.filtersecurityinterceptor#invoke -》
org.springframework.security.access.intercept.abstractsecurityinterceptor#beforeinvocation
呼叫。
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...