溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot整合Spring?Security過濾器鏈加載執行流程是什么

發布時間:2023-02-23 16:32:20 來源:億速云 閱讀:126 作者:iii 欄目:開發技術

這篇文章主要講解了“SpringBoot整合Spring Security過濾器鏈加載執行流程是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“SpringBoot整合Spring Security過濾器鏈加載執行流程是什么”吧!

    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過濾器鏈加載執行流程是什么”的內容了,經過本文的學習后,相信大家對SpringBoot整合Spring Security過濾器鏈加載執行流程是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女