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

深度解析Spring Security 中的 SecurityFilterChain核心功能

 更新時(shí)間:2025年08月01日 11:21:17   作者:csdn_tom_168  
SecurityFilterChain通過(guò)組件化配置、類型安全路徑匹配、多鏈協(xié)同三大特性,重構(gòu)了Spring Security的配置范式,接下來(lái)通過(guò)本文給大家介紹Spring Security中的SecurityFilterChain核心功能,感興趣的朋友一起看看吧

Spring Security 中的SecurityFilterChain深度解析

在 Spring Security 6 中,SecurityFilterChain 已成為安全配置的核心接口,徹底取代了傳統(tǒng)的 WebSecurityConfigurerAdapter 繼承方式。以下是其核心功能、配置方法及與舊版本的差異對(duì)比:

一、SecurityFilterChain的核心角色

  • 安全規(guī)則容器
    • 定義 HTTP 請(qǐng)求的授權(quán)規(guī)則(如路徑權(quán)限、方法權(quán)限)、認(rèn)證方式(表單登錄、OAuth2)及安全過(guò)濾器鏈。
    • 每個(gè) SecurityFilterChain Bean 對(duì)應(yīng)一組獨(dú)立的安全配置,支持多條鏈共存(通過(guò) order 屬性排序)。
  • 請(qǐng)求處理流程
    • Spring Security 按 SecurityFilterChain 的順序逐條匹配請(qǐng)求,第一個(gè)匹配的鏈將處理該請(qǐng)求。
    • 示例:公開(kāi) API 與管理后臺(tái)可通過(guò)不同鏈配置獨(dú)立權(quán)限。

二、配置方式對(duì)比:6.x vs 5.x

特性Spring Security 5.xSpring Security 6.x
配置入口繼承 WebSecurityConfigurerAdapter定義 SecurityFilterChain Bean
路徑匹配antMatchers("/public/**").permitAll()requestMatchers("/public/**").permitAll()
方法級(jí)權(quán)限不支持支持 requestMatchers(HttpMethod.POST, ...)
過(guò)濾器鏈控制通過(guò) configure(HttpSecurity http) 配置通過(guò) SecurityFilterChain Bean 顯式配置

三、6.x 配置示例詳解

@Configuration
public class SecurityConfig {
    // 定義第一條安全鏈(公開(kāi)接口)
    @Bean
    @Order(1)
    public SecurityFilterChain publicFilterChain(HttpSecurity http) throws Exception {
        http
            .securityMatcher("/public/**") // 僅匹配 /public/** 路徑
            .authorizeHttpRequests(auth -> auth
                .anyRequest().permitAll()
            )
            .csrf(CsrfConfigurer::disable); // 禁用CSRF(根據(jù)場(chǎng)景決定)
        return http.build();
    }
    // 定義第二條安全鏈(管理后臺(tái))
    @Bean
    @Order(2)
    public SecurityFilterChain adminFilterChain(HttpSecurity http) throws Exception {
        http
            .securityMatcher("/admin/**")
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/admin/login").permitAll()
                .anyRequest().hasRole("ADMIN")
            )
            .formLogin(form -> form
                .loginPage("/admin/login")
                .defaultSuccessUrl("/admin/dashboard")
            );
        return http.build();
    }
    // 全局安全配置(如JWT、OAuth2)
    @Bean
    public SecurityFilterChain globalFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/api/**").authenticated()
            )
            .oauth2Login(oauth -> oauth
                .loginPage("/oauth2/login")
            );
        return http.build();
    }
}

四、關(guān)鍵配置方法解析

  1. 路徑匹配
    • securityMatcher("/api/**"): 精確匹配路徑(Spring Security 6.2+ 新增,替代 antMatcher)。
    • requestMatchers(HttpMethod.POST, "/api/data"): 結(jié)合 HTTP 方法限制。
  2. 授權(quán)策略
    • anyRequest().authenticated(): 所有請(qǐng)求需認(rèn)證。
    • hasRole("ADMIN"): 需具備 ADMIN 角色。
    • hasAuthority("SCOPE_read"): 需擁有特定權(quán)限(適用于 OAuth2)。
  3. 認(rèn)證方式
    • formLogin(): 表單登錄配置。
    • oauth2Login(): OAuth2 客戶端配置。
    • httpBasic(): Basic 認(rèn)證。
  4. 安全頭配置
    • headers(headers -> headers.frameOptions().disable()): 允許 iframe 嵌入(需謹(jǐn)慎)。

五、遷移指南:5.x → 6.x

  1. 移除 @EnableWebSecurity
    • 6.x 默認(rèn)啟用 Web 安全,無(wú)需顯式注解。
  2. 替換配置類
    // 5.x 配置
    @Configuration
    @EnableWebSecurity
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.authorizeRequests().anyRequest().authenticated();
        }
    }
    // 6.x 配置
    @Configuration
    public class SecurityConfig {
        @Bean
        public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
            http.authorizeHttpRequests(auth -> auth.anyRequest().authenticated());
            return http.build();
        }
    }
  3. 調(diào)整路徑匹配語(yǔ)法

    • antMatchers() 替換為 requestMatchers(),并支持正則表達(dá)式:
      .requestMatchers(regexMatcher("/api/[0-9]+/data"))
      

六、高級(jí)場(chǎng)景應(yīng)用

  1. 多過(guò)濾器鏈協(xié)同
    • 通過(guò) @Order 注解控制鏈的優(yōu)先級(jí),實(shí)現(xiàn)微服務(wù)網(wǎng)關(guān)的細(xì)粒度控制。
  2. 與 OAuth2 集成

    http.oauth2ResourceServer(oauth2 -> oauth2
        .jwt(jwt -> jwt.decoder(jwtDecoder()))
    );
    
  3. 動(dòng)態(tài)權(quán)限控制
    • 結(jié)合 @PreAuthorize 注解和 SecurityFilterChain 實(shí)現(xiàn)方法級(jí)權(quán)限:
      @PreAuthorize("hasAuthority('SCOPE_write')")
      @PostMapping("/api/data")
      public ResponseEntity<?> createData() { ... }
      

七、總結(jié)

SecurityFilterChain 通過(guò)組件化配置、類型安全路徑匹配、多鏈協(xié)同三大特性,重構(gòu)了 Spring Security 的配置范式。其設(shè)計(jì)哲學(xué)與 Spring Boot 的“約定優(yōu)于配置”理念一脈相承,使安全規(guī)則更直觀、易維護(hù)。對(duì)于升級(jí)項(xiàng)目,需重點(diǎn)關(guān)注路徑匹配語(yǔ)法調(diào)整、多鏈優(yōu)先級(jí)控制,并充分利用 Lambda DSL 提升配置可讀性。

到此這篇關(guān)于Spring Security 中的 SecurityFilterChain 深度解析的文章就介紹到這了,更多相關(guān)Spring Security SecurityFilterChain內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 30條Java代碼編寫經(jīng)驗(yàn)分享

    30條Java代碼編寫經(jīng)驗(yàn)分享

    你知道寫好Java代碼的30條經(jīng)驗(yàn)是什么嗎?這篇文章主要為大家分享了30條Java代碼編寫經(jīng)驗(yàn)技巧,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • JDK安裝配置教程

    JDK安裝配置教程

    這篇文章主要為大家詳細(xì)介紹了JDK安裝配置教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • JAVA如何調(diào)用Shell腳本

    JAVA如何調(diào)用Shell腳本

    本篇文章主要介紹了JAVA如何調(diào)用Shell腳本,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • Spring Boot實(shí)現(xiàn)模塊化的幾種方法

    Spring Boot實(shí)現(xiàn)模塊化的幾種方法

    模塊可以是業(yè)務(wù)模塊,為應(yīng)用程序提供一些業(yè)務(wù)服務(wù),或者為幾個(gè)其他模塊或整個(gè)應(yīng)用程序提供跨領(lǐng)域關(guān)注的技術(shù)模塊。這篇文章主要介紹了Spring Boot實(shí)現(xiàn)模塊化,需要的朋友可以參考下
    2018-07-07
  • java的SimpleDateFormat線程不安全的幾種解決方案

    java的SimpleDateFormat線程不安全的幾種解決方案

    但我們知道SimpleDateFormat是線程不安全的,處理時(shí)要特別小心,要加鎖或者不能定義為static,要在方法內(nèi)new出對(duì)象,再進(jìn)行格式化,本文就介紹了幾種方法,感興趣的可以了解一下
    2021-08-08
  • Springboot集成fastDFS配置過(guò)程解析

    Springboot集成fastDFS配置過(guò)程解析

    這篇文章主要介紹了Springboot集成fastDFS配置過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • springBoot整合CXF并實(shí)現(xiàn)用戶名密碼校驗(yàn)的方法

    springBoot整合CXF并實(shí)現(xiàn)用戶名密碼校驗(yàn)的方法

    這篇文章主要介紹了springBoot整合CXF并實(shí)現(xiàn)用戶名密碼校驗(yàn)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • Java設(shè)計(jì)模式之迭代器模式解析

    Java設(shè)計(jì)模式之迭代器模式解析

    這篇文章主要介紹了Java設(shè)計(jì)模式之迭代器模式解析,迭代器模式提供一個(gè)對(duì)象來(lái)順序訪問(wèn)聚合對(duì)象中的一系列數(shù)據(jù),而不暴露聚合對(duì)象的內(nèi)部表示,本文提供了部分代碼,需要的朋友可以參考下
    2023-09-09
  • Spring反射內(nèi)置工具類ReflectionUtils用法及說(shuō)明

    Spring反射內(nèi)置工具類ReflectionUtils用法及說(shuō)明

    這段文章主要介紹了Java反射機(jī)制及其在獲取sentinel熔斷規(guī)則map和操作類屬性方法中的應(yīng)用,通過(guò)JDK和Spring的ReflectionUtils展示了如何優(yōu)雅地處理反射操作,提升代碼的可閱讀性和維護(hù)性
    2026-06-06
  • Spring中的@ConfigurationProperties在方法上的使用詳解

    Spring中的@ConfigurationProperties在方法上的使用詳解

    這篇文章主要介紹了Spring中的@ConfigurationProperties在方法上的使用詳解,@ConfigurationProperties應(yīng)該經(jīng)常被使用到,作用在類上的時(shí)候,將該類的屬性取值?與配置文件綁定,并生成配置bean對(duì)象,放入spring容器中,提供給其他地方使用,需要的朋友可以參考下
    2024-01-01

最新評(píng)論

桦南县| 南汇区| 当雄县| 册亨县| 壤塘县| 贵德县| 冀州市| 海安县| 建水县| 武定县| 耒阳市| 榕江县| 乌鲁木齐县| 兴海县| 济宁市| 陇川县| 西乡县| 仪征市| 天峻县| 海盐县| 磴口县| 吉木乃县| 灌阳县| 石城县| 曲麻莱县| 大同市| 兴和县| 眉山市| 新绛县| 南涧| 灵山县| 佛山市| 西藏| 永清县| 西贡区| 巧家县| 平陆县| 镇康县| 平昌县| 航空| 兴义市|