Spring Boot 3.0.10中JWT登录返回403 Forbidden问题求助
排查Spring Boot 3 JWT登录接口403 Forbidden问题
最可能的原因:请求路径匹配错误
你的SecurityFilterChain配置中,requestMatchers的路径缺少了开头的斜杠:
.requestMatchers("api/v1/auth/**")
而控制器的请求映射是@RequestMapping("/api/v1/auth"),登录接口的完整路径是/api/v1/auth/authenticate。Spring的路径匹配规则中,不带开头斜杠的路径无法匹配带斜杠的实际请求,导致登录接口没有被纳入permitAll范围,被安全拦截器判定为需要认证,返回403。
修复方案:给路径加上开头的斜杠:
.requestMatchers("/api/v1/auth/**")
其他排查方向
1. 密码编码器一致性检查
确认用户注册时使用的密码编码器,和ApplicationConfig中authenticationProvider配置的passwordEncoder是同一个实例。如果注册时用了不同的加密方式(比如明文存储,而验证时用BCrypt),会导致AuthenticationManager认证失败,部分场景下也可能引发403。
2. UserDetails状态字段验证
确保你的UserDetails实现类中,以下方法都返回true:
isEnabled()isAccountNonLocked()isAccountNonExpired()isCredentialsNonExpired()
如果其中任意一个返回false,用户会被判定为不可用,AuthenticationManager认证失败,也可能触发403错误。
3. 过滤器配置验证
虽然你的JwtAuthenticationFilter已经配置在UsernamePasswordAuthenticationFilter之前,但需要确认:
- 过滤器逻辑中,当没有Authorization头时会直接放行(你的代码这部分逻辑是正确的)
- 没有其他自定义过滤器或Spring Security默认过滤器干扰登录请求的处理
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

