首頁 >Java >java教程 >SpringBoot整合Spring Security過濾器鏈載入執行流程是什麼

SpringBoot整合Spring Security過濾器鏈載入執行流程是什麼

王林
王林轉載
2023-05-11 22:55:041110瀏覽

    1.引言

    在Spring Boot專案之中,我們引入Spring Security依賴,什麼也沒做,啟動專案Spring Security 就會生效,訪問請求就進行了攔截。

    Spring Boot 對於 Spring Security 提供了自動化設定方案,可以使用較少的設定來使用 Spring Security。

    那麼這個過濾器鍊是怎麼載入和實作攔截的呢?

    2.Spring Security過濾器鏈載入

    1.2.註冊名為springSecurityFilterChain的過濾器

    當Spring Boot 專案啟動後,SecurityFilterAutoConfiguration類會載入DelegatingFilterProxyRegistrationBean註冊過濾器,名字為springSecurityFilterChain

    SpringBoot整合Spring Security過濾器鏈載入執行流程是什麼

    注意:springSecurityFilterChain名字是固定寫死的。

    DelegatingFilterProxyRegistrationBean 註冊成功後,該篩選器就被載入了到了註冊器中。然後呼叫getFilter()方法產生 DelegatingFilterProxy代理物件並註冊到 IOC中 。

    SpringBoot整合Spring Security過濾器鏈載入執行流程是什麼

    3、查看DelegatingFilterProxy類別

    #我們存取項目,就會進入DelegatingFilterProxy類別的doFilter。 。

    DelegatingFilterProxy類別本質也是一個 Filter,其間接實作了 Filter接口,但是在 doFilter中其實呼叫的從 Spring 容器中取得的代理 Filter的實作類別。

    SpringBoot整合Spring Security過濾器鏈載入執行流程是什麼

    傳回的 FilterChainProxy物件。

    由此可知,DelegatingFilterProxy類別透過springSecurityFilterChain這個名稱,得到了一個FilterChainProxy過濾器,最終執行的是這個過濾器的doFilter方法。

    驗證 springSecurityFilterChain名詞不能修改
    查看 initDelegate方法。

    SpringBoot整合Spring Security過濾器鏈載入執行流程是什麼

    4.檢視 FilterChainProxy類別

    FilterChainProxy類別本質也是 Filter,所以請查看 doFilter方法。留意該類別裡面的屬性。

    public class FilterChainProxy extends GenericFilterBean {
        private static final Log logger = LogFactory.getLog(FilterChainProxy.class);
        private static final String FILTER_APPLIED =
                FilterChainProxy.class.getName().concat(".APPLIED");
        // 过滤器链
        private List<SecurityFilterChain> filterChains;
        private FilterChainProxy.FilterChainValidator filterChainValidator;
        private HttpFirewall firewall;

    4.1 看 doFilterInternal方法

    驚不驚喜? 15個過濾器都在這裡了!

    SpringBoot整合Spring Security過濾器鏈載入執行流程是什麼

    4.2 檢視 getFilters方法

    原來這些過濾器都會被封裝到 SecurityFilterChain物件中。

    SpringBoot整合Spring Security過濾器鏈載入執行流程是什麼

    5 檢視 SecurityFilterChain介面

    SecurityFilterChain類別是個接口,實作類別也只有一個 DefaultSecurityFilterChain類別。
    DefaultSecurityFilterChain類別的建構方法,初始化了 List filters,是透過傳參放進去的。

    SpringBoot整合Spring Security過濾器鏈載入執行流程是什麼

    過濾器鏈參數是什麼時候傳入的?

    6. 查看SpringBootWebSecurityConfiguration類別

    建立Spring Security 過濾器鍊是交給Spring boot 自動配置,由SpringBootWebSecurityConfiguration類別建立注入。

    SpringBoot整合Spring Security過濾器鏈載入執行流程是什麼

    查看 WebSecurityConfigurerAdapter類別。

    SpringBoot整合Spring Security過濾器鏈載入執行流程是什麼

    然後會注入HttpSecurity對象,HttpSecurity可以理解為Spring Security 的http核心配置,存放Spring Security 中的過濾器鏈、請求匹配路徑等相關認證授權的重要方法。

    然後開始建立 Spring Security 過濾器鏈了,是交給 Spring Boot自動配置,總共有 15個過濾器。
    使用 OrderedFilter進行代理,並設定了order屬性。
    新增完成後,將這些篩選器再封裝為 DefaultSecurityFilterChain物件。

    最後透過 WebSecurityConfiguration設定載入 springSecurityFilterChain,WebSecurityConfiguration中維護了securityFilterChains屬性,會存放過濾器鏈中所有的過濾器。

    以上是SpringBoot整合Spring Security過濾器鏈載入執行流程是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    陳述:
    本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除