最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot整合Spring?Security過濾器鏈加載執(zhí)行流程源碼分析(最新推薦)

 更新時(shí)間:2023年02月23日 14:42:21   作者:IT-熊貓  
Spring?Boot?對(duì)于?Spring?Security?提供了自動(dòng)化配置方案,可以使用更少的配置來使用?Spring?Security,這篇文章主要介紹了SpringBoot整合Spring?Security過濾器鏈加載執(zhí)行流程源碼分析,需要的朋友可以參考下

1.引言

在 Spring Boot項(xiàng)目之中,我們引入 Spring Security依賴,什么也沒做,啟動(dòng)項(xiàng)目 Spring Security 就會(huì)生效,訪問請(qǐng)求就進(jìn)行了攔截。

Spring Boot 對(duì)于 Spring Security 提供了自動(dòng)化配置方案,可以使用更少的配置來使用 Spring Security。

那么這個(gè)過濾器鏈?zhǔn)窃趺醇虞d和實(shí)現(xiàn)攔截的呢?

2.Spring Security過濾器鏈加載

2.1.注冊(cè)名為 springSecurityFilterChain的過濾器

當(dāng) Spring Boot 項(xiàng)目啟動(dòng)后,SecurityFilterAutoConfiguration類會(huì)加載 DelegatingFilterProxyRegistrationBean注冊(cè)過濾器,名字為 springSecurityFilterChain

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

DelegatingFilterProxyRegistrationBean 注冊(cè)成功后,該過濾器就被加載了到了注冊(cè)器中。然后調(diào)用getFilter()方法生成 DelegatingFilterProxy代理對(duì)象并注冊(cè)到 IOC中 。

3、查看 DelegatingFilterProxy類

我們?cè)L問項(xiàng)目,就會(huì)進(jìn)入 DelegatingFilterProxy類的 doFilter方法。

DelegatingFilterProxy類本質(zhì)也是一個(gè) Filter,其間接實(shí)現(xiàn)了 Filter接口,但是在 doFilter中其實(shí)調(diào)用的從 Spring 容器中獲取到的代理 Filter的實(shí)現(xiàn)類。

返回的 FilterChainProxy對(duì)象。

由此可知,DelegatingFilterProxy類通過 springSecurityFilterChain這個(gè)名稱,得到了一個(gè) FilterChainProxy過濾器,最終執(zhí)行的是這個(gè)過濾器的 doFilter方法。

驗(yàn)證 springSecurityFilterChain名詞不能修改
查看 initDelegate方法。

4.查看 FilterChainProxy類

FilterChainProxy類本質(zhì)也是一個(gè) 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個(gè)過濾器都在這里了!

4.2 查看 getFilters方法

原來這些過濾器都被封裝進(jìn) SecurityFilterChain對(duì)象中。

5 查看 SecurityFilterChain接口

SecurityFilterChain類是個(gè)接口,實(shí)現(xiàn)類也只有一個(gè) DefaultSecurityFilterChain類。
DefaultSecurityFilterChain類的構(gòu)造方法,初始化了 List filters,是通過傳參放進(jìn)去的。

過濾器鏈參數(shù)是什么時(shí)候傳入的?

6. 查看 SpringBootWebSecurityConfiguration類

創(chuàng)建 Spring Security 過濾器鏈?zhǔn)墙唤o Spring boot 自動(dòng)配置,由 SpringBootWebSecurityConfiguration類創(chuàng)建注入。

查看 WebSecurityConfigurerAdapter類。

然后會(huì)注入 HttpSecurity對(duì)象,HttpSecurity可以理解為 Spring Security 的 http核心配置,存放 Spring Security 中的過濾器鏈、請(qǐng)求匹配路徑等相關(guān)認(rèn)證授權(quán)的重要方法。

然后開始創(chuàng)建 Spring Security 過濾器鏈了,是交給 Spring Boot自動(dòng)配置,一共有 15個(gè)過濾器。
使用 OrderedFilter進(jìn)行代理,并設(shè)置了order屬性。
添加完成后,將這些過濾器再封裝為 DefaultSecurityFilterChain對(duì)象。

最后通過 WebSecurityConfiguration配置加載 springSecurityFilterChain,WebSecurityConfiguration中維護(hù)了securityFilterChains屬性,會(huì)存放過濾器鏈中所有的過濾器。

總結(jié):

Spring boot 通過 DelegatingFilterProxyRegistrationBean注冊(cè)過濾器,名字為 springSecurityFilterChain,并生成 DelegatingFilterProxy代理對(duì)象并注冊(cè)到 IoC中。最終真正調(diào)用 FilterChainProxy過濾器的 doFilter 獲取到 Spring Security 過濾器鏈。

Spring Security的過濾器鏈在底層是封裝在 SecurityFilterChain接口中的。

到此這篇關(guān)于SpringBoot整合Spring Security過濾器鏈加載執(zhí)行流程源碼分析的文章就介紹到這了,更多相關(guān)SpringBoot整合Spring Security過濾器鏈內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java ThreadPoolExecutor的參數(shù)深入理解

    Java ThreadPoolExecutor的參數(shù)深入理解

    這篇文章主要介紹了Java ThreadPoolExecutor的參數(shù)深入理解的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • nacos如何修改默認(rèn)的用戶名密碼

    nacos如何修改默認(rèn)的用戶名密碼

    這篇文章主要介紹了nacos如何修改默認(rèn)的用戶名密碼問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • jackson反序列化時(shí)如何忽略不需要的字段

    jackson反序列化時(shí)如何忽略不需要的字段

    這篇文章主要介紹了jackson反序列化時(shí)如何忽略不需要的字段,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Spring之Environment類的使用方式

    Spring之Environment類的使用方式

    這篇文章主要介紹了Spring之Environment類的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 基于visualvm監(jiān)控類實(shí)現(xiàn)過程詳解

    基于visualvm監(jiān)控類實(shí)現(xiàn)過程詳解

    這篇文章主要介紹了基于visualvm監(jiān)控類實(shí)現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 淺談java中的局部變量和全局變量

    淺談java中的局部變量和全局變量

    這篇文章主要涉及了java中的局部變量和全局變量,就二者的含義、生存時(shí)間和創(chuàng)建位置作了介紹,需要的朋友可以參考下。
    2017-09-09
  • JavaSwing BorderLayout 邊界布局的實(shí)現(xiàn)代碼

    JavaSwing BorderLayout 邊界布局的實(shí)現(xiàn)代碼

    這篇文章主要介紹了JavaSwing BorderLayout 邊界布局的實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Java的非對(duì)稱加密(RSA、數(shù)字簽名、數(shù)字證書)詳解

    Java的非對(duì)稱加密(RSA、數(shù)字簽名、數(shù)字證書)詳解

    這篇文章主要介紹了Java的非對(duì)稱加密(RSA、數(shù)字簽名、數(shù)字證書)詳解,非對(duì)稱加密:加密、解密使用不同的兩把密鑰,這兩把密鑰成對(duì),一般通信開始時(shí)通過非對(duì)稱加密將對(duì)稱加密的密鑰發(fā)送給另一方,然后雙方通過對(duì)稱加密來進(jìn)行溝通,需要的朋友可以參考下
    2024-01-01
  • 詳解JAVA 字節(jié)流和字符流

    詳解JAVA 字節(jié)流和字符流

    這篇文章主要介紹了JAVA 字節(jié)流和字符流的的相關(guān)資料,文中講解非常的細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • 解決springmvc整合Mybatis的Log4j日志輸出問題

    解決springmvc整合Mybatis的Log4j日志輸出問題

    這篇文章主要介紹了解決springmvc整合Mybatis的Log4j日志輸出問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07

最新評(píng)論

博客| 南丹县| 都兰县| 三门县| 安乡县| 哈巴河县| 星子县| 平昌县| 璧山县| 台江县| 丹东市| 凤山县| 舟曲县| 鄂尔多斯市| 宁安市| 南丹县| 江北区| 荣昌县| 娄底市| 洪洞县| 古交市| 台中县| 江达县| 西华县| 黑水县| 万盛区| 文登市| 商丘市| 惠水县| 松潘县| 永川市| 封开县| 保定市| 闸北区| 盱眙县| 馆陶县| 靖州| 浙江省| 延寿县| 祁门县| 宜兰县|