1. 程式人生 > 程式設計 >全面解析Spring Security 過濾器鏈的機制和特性

全面解析Spring Security 過濾器鏈的機制和特性

1. 前言

過濾器作為 Spring Security 的重中之重,我們需要了解其中的機制。這樣我們才能根據業務需求的變化進行定製。今天來探討一下 Spring Security 中的過濾器鏈機制。

2. Spring Security 過濾器鏈

客戶端(APP 和後臺管理客戶端)嚮應用程式傳送請求,然後應用根據請求的 URI 的路徑來確定該請求的過濾器鏈(Filter)以及最終的具體 Servlet 控制器(Controller)。

全面解析Spring Security 過濾器鏈的機制和特性

從上圖我們可以看出 Spring Security 以一個單 Filter(FilterChainProxy) 存在於整個過濾器鏈中,而這個 FilterChainProxy

實際內部代理著眾多的 Spring Security Filter 。這簡直就是套娃啊!

2.1 過濾器鏈的形成過程

再多說一點 Filter 們的初始化過程,首先 Filter 們按照一定的順序被 SecurityBuilder 的實現來組裝為 SecurityFilterChain ,然後通過 WebSecurity 注入到 FilterChainProxy 中去,接著 FilterChainProxy 又在 WebSecurityConfiguration 中以 springSecurityFilterChain 的名稱註冊為 Spring Bean 。實際上還有一個隱藏層 DelegatingFilterProxy

代理了 springSecurityFilterChain 注入到最後整個 Servlet 過濾器鏈中。簡單畫了個圖;

全面解析Spring Security 過濾器鏈的機制和特性

事實上 Spring Security 的內建 Filter 對於 Spring IoC 容器來說都是不可見的。

Spring Security 允許有多 條過濾器鏈並行,Spring SecurityFilterChainProxy 可以代理多條過濾器鏈並根據不同的 URI 匹配策略進行分發。但是每個請求每次只能被分發到一條過濾器鏈。如下圖所示:

全面解析Spring Security 過濾器鏈的機制和特性

關於 Filter 的其它細節可以通過 相關文章[1] 瞭解。

實際每條過濾鏈 就是一個 SecurityFilterChain

4. 總結

今天我們通過對 Spring Security 中 過濾器鏈機制,對於深入學習 Spring Security 有著至關重要的意義。有什麼問題和心得請留言反饋。

參考資料

相關文章: https://www.felord.cn/spring-security-filters.html

到此這篇關於Spring Security 過濾器鏈的機制和特性的文章就介紹到這了,更多相關Spring Security 過濾器鏈內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!