Spring Boot JWT认证Postman测试遇401 Unauthorized错误求助
1. 先修正Postman的重复请求头设置
你同时在Auth选项卡(Bearer Token)和Headers选项卡添加了Authorization字段,这会让请求头里出现两个Authorization值,服务器解析时直接混乱,触发签名验证失败。只保留其中一种方式,优先用Auth选项卡的Bearer Token,Postman会自动生成标准的Bearer <token>格式请求头。
2. 核心排查:JWT密钥一致性
日志里的invalid JWT signature100%是因为生成令牌的密钥和验证令牌的密钥不一致,针对你用的bezkoder项目:
- 打开
application.properties/application.yml,找到jwt.secret配置项,确认密钥内容 - 检查
JwtUtils类的getJwtSecret()方法,确保它正确读取了配置文件的jwt.secret,没有硬编码的密钥覆盖配置值 - 注意密钥不能有空格、特殊字符转义错误,比如配置文件里的引号是否正确闭合
3. 验证令牌本身的合法性
把拿到的accessToken复制到本地JWT解析工具(比如用jjwt库的命令行工具):
- 检查Payload里的
sub(用户名)、roles是否和登录响应一致 - 确认Signature算法是HS512(bezkoder项目默认)
- 检查令牌有没有被篡改,比如复制时多了空格、换行符,或者Postman自动加了多余字符
4. 检查AuthTokenFilter的解析逻辑
确认AuthTokenFilter里的令牌提取和验证流程:
- 有没有正确去掉
Bearer前缀再执行验证 - 验证时是否调用了
JwtUtils的标准验证方法,有没有自己重新实现验证逻辑导致密钥不匹配
5. 兜底排查:用户信息加载异常
如果以上都没问题,检查登录时生成JWT的Claims是否正确:
- 登录接口生成JWT时,是否正确获取了用户的id、username、roles等信息
- 数据库里的用户角色是否和响应里的一致,有没有角色名称格式错误(比如少了ROLE_前缀)
内容的提问来源于stack exchange,提问作者54V4G3208
相关产品推荐
相关产品推荐

