天天看點

Spring Security(3)

作者:湘王說

您好,我是湘王,這是我的頭條号「湘王說」,歡迎您來,歡迎您再來~

前面運作寫好的代碼之是以沒有任何顯示,是因為還沒有對Spring Security進行配置,當然啥也不顯示了。這就好比你坐在車上,卻不打開發動機,車子當然跑不起來。是以咱們就來讓它跑起來。不過在配置之前,有必要對Spring Security的登入流程做個大緻了解。

如果深入源碼去了解,這個玩意及其複雜,但是沒必要,知道它的機制就行了。就好比你買車也不必把發動機拆開去看它是怎麼工作的吧。簡單來說它就是下面這些步驟:

1、Spring Security通過AuthenticationManager接口進行身份驗證

2、ProviderManager是AuthenticationManager的一個預設實作

3、ProviderManager把驗證工作委托給了AuthenticationProvider接口

4、AuthenticationProvider的實作類DaoAuthenticationProvider會檢查身份認證

5、DaoAuthenticationProvider又把認證工作委托給了UserDetailsService接口

6、自定義UserDetailsService類從資料庫中擷取使用者賬号、密碼、角色等資訊,然後封裝成UserDetails傳回

7、使用Spring Security還需要自定義AuthenticationProvider接口,擷取使用者輸入的賬号、密碼等資訊,并封裝成Authentication接口

8、将UserDetails和Authentication進行比對,如果一緻就傳回UsernamePasswordAuthenticationToken,否則抛出異常

下面是認證流程圖:

Spring Security(3)

首先重寫loadUserByUsername:

Spring Security(3)
Spring Security(3)

因為UserDetailsService傳回了封裝的UserDetails,是以需要再自定義AuthenticationProvider傳回Authentication接口:

Spring Security(3)
Spring Security(3)

接着來實作實作WebSecurityConfigurerAdapter,它通過重寫WebSecurityConfigurerAdapter中的相關方法(一般是configurer)來自定義配置。WebSecurityConfigurerAdapter主要做幾件事:

1、初始化

2、開啟Security

3、配置各種過濾器,實作驗證過濾器鍊

下面是它的代碼:

Spring Security(3)

接着用postman進行測試:

Spring Security(3)

回顧整個調用過程,它的時序圖是:

Spring Security(3)

但是等等:好像除了/login,其他方法都不能正常通路!

感謝您的大駕光臨!咨詢技術、産品、營運和管理相關問題,請關注後留言。歡迎騷擾,不勝榮幸~