過濾器做爲 Spring Security 的重中之重,咱們須要瞭解其中的機制。這樣咱們才能根據業務需求的變化進行定製。今天來探討一下 Spring Security 中的過濾器鏈機制html
客戶端(APP 和後臺管理客戶端)嚮應用程序發送請求,而後應用根據請求的 URI 的路徑來肯定該請求的過濾器鏈(Filter)以及最終的具體 Servlet 控制器(Controller)。spring
從上圖咱們能夠看出 Spring Security 以一個單 Filter(FilterChainProxy) 存在於整個過濾器鏈中,而這個 FilterChainProxy
實際內部代理着衆多的 Spring Security Filter 。這簡直就是套娃啊!學習
再多說一點 Filter 們的初始化過程,首先 Filter 們按照必定的順序被 SecurityBuilder
的實現來組裝爲 SecurityFilterChain
,而後經過 WebSecurity
注入到 FilterChainProxy
中去,接着 FilterChainProxy
又在 WebSecurityConfiguration
中以 springSecurityFilterChain
的名稱註冊爲 Spring Bean 。實際上還有一個隱藏層 DelegatingFilterProxy
代理了 springSecurityFilterChain
注入到最後整個 Servlet 過濾器鏈中。 簡單畫了個圖;ui
事實上 Spring Security 的內置 Filter 對於 Spring IoC 容器來講都是不可見的。
Spring Security 容許有多 條過濾器鏈並行,Spring Security 的 FilterChainProxy
能夠代理多條過濾器鏈並根據不一樣的 URI 匹配策略進行分發。可是每一個請求每次只能被分發到一條過濾器鏈。以下圖所示:spa
關於 Filter 的其它細節能夠經過 相關文章 瞭解。3d
實際每條過濾鏈 就是一個
SecurityFilterChain
今天咱們經過對 Spring Security 中 過濾器鏈機制,對於深刻學習 Spring Security 有着相當重要的意義。 有什麼問題和心得請留言反饋。代理