当前位置: 首页 > ai >正文

【学习笔记】解决 JWT 解析报错:Claims claims = JwtUtil.parseJWT(...) Error Code 401(token过期)

在学习《苍穹外卖》 Web 项目的过程中,我在解析 JWT 时遇到了一次报错。这里记录下整个排查与解决的过程,方便日后复盘,也能帮助遇到同样问题的小伙伴。

一、问题描述

在代码中,我尝试解析一个 JWT:

Claims claims = JwtUtil.parseJWT(jwtProperties.getAdminSecretKey(), token);

运行后直接报错,在线文档提示响应码 401。一开始不确定问题出在哪,只能逐步排查。
使用debug模式运行后,发现 claims 的值居然是null,所以下面进一步对于这条语句进行检查:
在这里插入图片描述
在这里插入图片描述

二、可能的原因分析

结合错误信息和常见情况,这里总结了几种可能性:

  1. 配置文件中的密钥不一致

    • jwtProperties.getAdminSecretKey() 获取到的密钥,和生成 Token 时的密钥不同。
  2. Token 格式不正确

    • JWT 本身需要满足 header.payload.signature 三段结构,如果缺失或被篡改,就会解析失败。
  3. Token 为空或传错

    • 可能传入的 token 值是 null 或者没有带上前端传过来的 Token。
  4. Token 已过期

    • JWT 在生成时一般会设置 exp(过期时间),过了这个时间再去解析就会报错。

三、排查过程

  1. 确认密钥配置
    查看 application.yml,确认配置的 adminSecretKey 与生成 Token 的一致。没问题。
    在这里插入图片描述
    在这里插入图片描述

  2. 打印 Token
    在解析前打印 token,检查格式。发现格式正确,并且 header 和 payload 都能正常解码。

  3. token过期问题
    搜索之后怀疑:Token 已经过期(Expired)


四、最终原因

问题的根源在于 Token 已经过期
JWT 的过期时间(exp)一旦超出,就无法再被解析,需要用户重新获取新的 Token。


五、解决办法

  • 开发环境:手动重新生成一个新的 Token,替换掉过期的 Token;或者重新登录一下,在F12里面找到网络,点击login的预览从中取出token,即可正常解析。
    在这里插入图片描述

  • 生产环境

    1. 在用户登录时生成 Token,并返回给前端。
    2. 前端请求时带上 Token。
    3. 如果 Token 过期,后端应返回 401 状态码,前端可以引导用户重新登录或者通过 刷新 Token(Refresh Token) 机制获取新的 Token。

六、经验总结

  • 遇到 JWT 解析失败,第一时间要想到 是否过期

  • 排查思路可以按照:

    1. 密钥是否一致
    2. Token 格式是否正确
    3. Token 是否为空
    4. Token 是否过期
  • 在实际开发中,可以通过 刷新 Token延长过期时间 来改善用户体验。


补充:后面才知道401错误码就是未授权(哭

http://www.xdnf.cn/news/20101.html

相关文章:

  • 开讲啦|MBSE公开课:第五集 MBSE中期设想(下)
  • Process Explorer 学习笔记(第三章3.2.4):找出窗口对应的进程
  • Python+DRVT 从外部调用 Revit:批量创建梁
  • PiscCode轨迹跟踪Mediapipe + OpenCV进阶:速度估算
  • VIVADO的IP核 DDS快速使用——生成正弦波,线性调频波
  • 【FastDDS】Discovery ( 04-STATIC Discovery Settings)
  • yolov8环境配置:从安装到卸载,从入门到放弃。
  • std::complex
  • 深入剖析Spring动态代理:揭秘JDK动态代理如何精确路由接口方法调用
  • 实习结束,秋招开启
  • 通过API接口管理企业微信通讯录案例
  • AI大模型如何重塑日常?从智能办公到生活服务的5个核心改变
  • 算法模板(Java版)_DFS与BFS
  • 贵州移动创维E900V22F-S905L3SB-全分区备份
  • 【Linux网络编程】应用层协议-----HTTPS协议
  • C#中IEnumerable 、IAsyncEnumerable、yield
  • 13问详解VoLTE视频客服:菊风带你从基础到应用,厘清所有疑惑
  • 储能调峰新实践:智慧能源平台如何保障风电消纳与电网稳定?
  • 从 0 到 1 攻克订单表分表分库:亿级流量下的数据库架构实战指南
  • 嵌入式第四十六天(51单片机(通信))
  • 2025年你需要了解的大型语言模型部署工具
  • 配置WSL2的Ubuntu接受外部设备访问
  • 课前准备--基因组(WGS/WES)联合单细胞获取突变信息
  • 分析KLA-Tencor公司膜厚THK产品
  • Python 算数运算练习题
  • 应对技术选型与技术债务以及架构设计与业务需求的关系
  • 概率与数理统计公式及结论汇总
  • 从策略到实效|Adobe Target 实战应用与成功案例
  • uni-app iOS 文件调试常见问题与解决方案:结合 itools、克魔、iMazing 的实战经验
  • 用spring框架实现简单的MVC业务