Spring Security 6.x 已废弃 OAuth2ResourceServerConfigurer::jwt 等返回子配置器的方法,统一采用 Lambda 风格的 Customizer 方式配置 JWT 认证,本文详解迁移步骤与最佳实践。
spring security 6.x 已废弃 `oauth2resourceserverconfigurer::jwt` 等返回子配置器的方法,统一采用 lambda 风格的 `customizer` 方式配置 jwt 认证,本文详解迁移步骤与最佳实践。
在 Spring Security 6.0 及更高版本中,安全配置 DSL 进行了重大重构:为提升一致性与可读性,所有链式调用(如 .and())和返回独立 Configurer 实例的方法(如 http.oauth2ResourceServer(OAuth2ResourceServerConfigurer::jwt))均被标记为 deprecated。取而代之的是统一使用接受 Customizer<T> 的重载方法,通过 Lambda 表达式直接定制子模块行为。
这意味着你不能再写:
http.oauth2ResourceServer(OAuth2ResourceServerConfigurer::jwt); // ❌ 已废弃
而应改为显式调用 jwt() 方法,并传入 Customizer.withDefaults() 或自定义逻辑:
@BeanSecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(authz -> authz .anyRequest().authenticated() // ✅ 替代已移除的 antMatchers()/mvcMatchers() ) .sessionManagement(session -> session .sessionCreationPolicy(SessionCreationPolicy.STATELESS) ) .httpBasic(Customizer.withDefaults()) // ✅ 替代已废弃的 httpBasic() .csrf(csrf -> csrf.disable()) .headers(headers -> headers .frameOptions(frameOptions -> frameOptions.sameOrigin()) ) .oauth2ResourceServer(oauth2 -> oauth2 .jwt(Customizer.withDefaults()) // ✅ 正确用法:Lambda + Customizer ); return http.build();}
⚠️ 关键注意事项:
.requestMatchers("/public/**").permitAll().requestMatchers("/api/admin/**").hasRole("ADMIN")
✅ 总结:Spring Security 6+ 的核心原则是 “单一 DSL 路径” —— 全面拥抱函数式、不可变、Lambda 驱动的配置风格。及时更新 JWT 配置方式,不仅能消除编译警告,更能确保未来版本兼容性与配置语义清晰性。