配置Spring Security的antMatchers后仍无法访问Controller求助
问题排查与解决方案
核心问题分析
你的配置中同时使用了两种Spring Security放行路径的方式,这会导致逻辑冲突,是访问失败的主要原因:
SecurityFilterChain中通过antMatchers(EXCLUDE_PATH).permitAll():允许请求通过过滤器链,无需认证WebSecurityCustomizer中通过webSecurity.ignoring().antMatchers(EXCLUDE_PATH):让请求完全绕过Spring Security过滤器链
两者混用会引发不可预期的拦截逻辑,导致/test路径无法正常放行。
具体排查与修复步骤
1. 移除重复配置,保留一种放行方式
推荐保留SecurityFilterChain中的配置(它能让请求正常经过CORS等必要过滤器,同时实现放行),删除WebSecurityCustomizer相关代码:
// 删掉这段重复配置代码 @Bean WebSecurityCustomizer webSecurityCustomizer() { return webSecurity -> { webSecurity.ignoring().antMatchers(EXCLUDE_PATH); }; }
2. 验证路径匹配准确性
- 确认请求路径是精确的
/test,避免带额外斜杠(如/test/)、参数或大小写不一致(Spring MVC默认路径大小写敏感) - 检查Postman请求的实际地址是否与Controller映射完全匹配
3. 排查自定义认证入口的影响
临时注释掉异常处理中的自定义入口配置,测试是否能正常访问:
// 临时注释,排查自定义入口是否拦截了放行请求 // .exceptionHandling().authenticationEntryPoint(customAuthenticationEntryPoint).and()
如果注释后可以访问,说明customAuthenticationEntryPoint的逻辑存在问题,需要检查它是否错误拦截了放行路径的请求。
4. 确认Controller被正确扫描
- 检查启动类的
@SpringBootApplication是否覆盖了TestController所在的包路径,必要时添加@ComponentScan指定扫描范围 - 确认TestController的
@RestController注解未遗漏,确保Spring能识别并注册该控制器
内容的提问来源于stack exchange,提问作者evelynn9
相关产品推荐
相关产品推荐

