You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Security创建SecurityFilterChain Bean时依赖注入失败求助

解决Spring Security中SecurityFilterChain创建的请求匹配器错误

问题原因

Spring Security 6.x(对应Spring Boot 3.x版本)对请求匹配器的使用做了严格限制:当直接使用requestMatchers("/path/**")这种字符串路径写法时,框架无法自动判断该路径属于Spring MVC端点还是其他类型请求,因此抛出错误,要求明确指定匹配器类型。

解决方案

方案一:使用MvcRequestMatcher(推荐,适配Spring MVC端点)

由于项目引入了spring-boot-starter-web,属于Spring MVC项目,建议使用MvcRequestMatcher。需要注入HandlerMappingIntrospector来构建匹配器:

修改后的SecurityConfiguration.java:

@Configuration
@EnableWebSecurity
public class SecurityConfiguration  {

    @Autowired
    private AuthenticationProvider authenticationProvider;
    @Autowired
    private JwtAuthenticationFilter jwtAuthenticationFilter;
    @Autowired
    private UserDetailsService userDetailsService;
    @Autowired
    private HandlerMappingIntrospector handlerMappingIntrospector;


    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception{
        MvcRequestMatcher.Builder mvcMatcherBuilder = new MvcRequestMatcher.Builder(handlerMappingIntrospector);
        
        http.csrf()
                .disable()
                .authorizeHttpRequests(auth -> auth
                        .requestMatchers(mvcMatcherBuilder.pattern("/auth/**")).permitAll()
                        .anyRequest().authenticated())
                .sessionManagement(session -> session
                        .sessionCreationPolicy(SessionCreationPolicy.STATELESS))
                .authenticationProvider(authenticationProvider)
                .addFilterBefore(jwtAuthenticationFilter , UsernamePasswordAuthenticationFilter.class);

        return http.build();
    }
}

方案二:使用AntPathRequestMatcher

如果不需要Spring MVC的路径匹配规则(比如非MVC端点),可以直接实例化AntPathRequestMatcher:

修改securityFilterChain方法中的请求匹配部分:

.authorizeHttpRequests()
.requestMatchers(new AntPathRequestMatcher("/auth/**"))
.permitAll()
.anyRequest()
.authenticated()

额外优化:清理重复依赖

你的pom.xml中重复引入了jjwt-api依赖,建议删除其中一个,避免潜在的依赖冲突:
删除以下重复的依赖块:

<dependency>
    <groupId>io.jsonwebtoken</groupId>
    <artifactId>jjwt-api</artifactId>
    <version>0.11.5</version>
</dependency>

内容的提问来源于stack exchange,提问作者mr hearvy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 20:15:57