Spring Security 6.1升级遇JwtDecoder兼容问题,求全请求放行配置
解决Spring Security 6.1全请求放行配置问题
问题分析
升级到Spring Security 6.1后,原依赖WebSecurityConfigurerAdapter的配置方式已被弃用,若错误引入oauth2ResourceServer相关配置又不需要资源服务器,会触发JwtDecoder缺失或principalName cannot be empty错误。目标是配置所有请求无需认证即可访问。
解决方案
直接使用Spring Security 6.x的Lambda DSL配置方式,完全跳过认证逻辑:
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.web.SecurityFilterChain; @Configuration @EnableWebSecurity public class SecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http // 关闭CSRF(根据实际场景调整,若需要可移除该行) .csrf(csrf -> csrf.disable()) // 放行所有请求,无需认证 .authorizeHttpRequests(auth -> auth .anyRequest().permitAll() ) // 禁用认证管理器,避免触发不必要的认证逻辑 .authenticationManager(null) // 关闭安全上下文的强制保存,避免认证主体相关错误 .securityContext(context -> context.requireExplicitSave(false)); return http.build(); } }
关键说明
- 不要引入任何oauth2ResourceServer相关依赖或配置,避免触发JWT解码器相关逻辑
anyRequest().permitAll()直接实现所有请求的无认证放行- 配置
authenticationManager(null)和securityContext.requireExplicitSave(false),彻底关闭认证上下文初始化流程,规避principalName cannot be empty类错误 - 若需保留CSRF防护,可删除
csrf.disable()配置,按需调整安全规则
内容的提问来源于stack exchange,提问作者Cole Gvozdas
相关产品推荐
相关产品推荐

