Spring Boot Security:JWT认证后接口均返回403错误求助
Spring Boot JWT认证后/server/list接口403 Forbidden排查方案
检查Spring Security权限配置
确认/server/list接口是否被正确配置为需要认证:- 检查配置类中是否存在
antMatchers("/server/list").authenticated()(或基于lambda的authorizeHttpRequests().requestMatchers("/server/list").authenticated())的规则,避免误设为denyAll()或错误的角色限制(比如hasRole("ADMIN")但注册用户未分配该角色)。 - 若存在多套
HttpSecurity配置,确保JWT相关配置的优先级更高(可通过@Order注解调整顺序)。
- 检查配置类中是否存在
验证JWT Token的生成与解析逻辑
- 确认
/auth/register生成Token时,是否正确注入了用户的身份信息(如用户名)和必要权限,避免Token中无有效认证数据。 - 检查JWT认证过滤器是否正确拦截请求:确保过滤器已被添加到Spring Security的过滤器链中,且能从
Authorization头中正确提取Token并完成解析。 - 验证解析后的
Authentication对象是否被存入SecurityContextHolder——过滤器中需执行SecurityContextHolder.getContext().setAuthentication(auth),否则后续请求无法识别已认证用户。
- 确认
确认请求头格式正确性
确保请求头严格遵循Authorization: Bearer <token>格式:Bearer与Token之间必须有一个空格,Token不能包含额外空格、换行符或转义字符。- 可通过curl命令快速验证:
curl -H "Authorization: Bearer your_generated_token" http://localhost:8080/server/list
排查默认配置冲突
- 检查是否引入了冲突的Spring Security依赖,或未排除默认的
SecurityAutoConfiguration,导致默认的表单认证或HTTP Basic认证覆盖了自定义JWT配置。 - 确认配置类上已添加
@EnableWebSecurity注解,确保自定义配置生效。
- 检查是否引入了冲突的Spring Security依赖,或未排除默认的
开启调试日志定位根因
在配置文件中添加Spring Security的调试日志,获取请求拦截的完整流程:logging: level: org.springframework.security: DEBUG调试日志会输出每个过滤器的执行情况、认证失败的具体原因(如Token签名无效、过期、权限不足等),这是定位403错误最有效的方式。
若以上排查仍无法解决问题,建议补充以下核心代码片段:
- Spring Security的完整配置类
/auth/register接口中生成JWT Token的代码- JWT认证过滤器的实现代码
内容的提问来源于stack exchange,提问作者TheAmygdala
相关产品推荐
相关产品推荐

