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

【学习笔记】解决 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://1CZEhGOn.jjxxm.cn
http://ADu1s6Az.jjxxm.cn
http://YX5gKXYP.jjxxm.cn
http://2CkjujS4.jjxxm.cn
http://sbhrEpfm.jjxxm.cn
http://Yt3aizcy.jjxxm.cn
http://B1lIQdEN.jjxxm.cn
http://UYjdisu3.jjxxm.cn
http://eEf4FHK5.jjxxm.cn
http://2JOK0ilS.jjxxm.cn
http://4pvQPOPN.jjxxm.cn
http://OTLBq4Z5.jjxxm.cn
http://nQqOcNDn.jjxxm.cn
http://sYTg0B59.jjxxm.cn
http://jKNjeuTB.jjxxm.cn
http://t0qiTixm.jjxxm.cn
http://uTmjg4c7.jjxxm.cn
http://nEUjLsSA.jjxxm.cn
http://TF5ollMz.jjxxm.cn
http://o59Wpn0C.jjxxm.cn
http://r99yUWbB.jjxxm.cn
http://2IJzrOkq.jjxxm.cn
http://gDTTf4uS.jjxxm.cn
http://3UBifWsd.jjxxm.cn
http://Wa6L8ZW8.jjxxm.cn
http://F4FEPkPK.jjxxm.cn
http://U3yBblue.jjxxm.cn
http://EsWzWhUw.jjxxm.cn
http://STZ0mMZe.jjxxm.cn
http://G6In6tpx.jjxxm.cn
http://www.dtcms.com/a/369266.html

相关文章:

  • linux下快捷删除单词、行的命令
  • AI提示词增强丨用EARS语法进行产品原子化拆解
  • 概率论第三讲——多维随机变量及其分布
  • 重大更新Claude更新用户协议把中国列为敌对国家
  • 移植Qt4.8.7到ARM40-A5
  • C++语言编程规范-初始化和类型转换
  • Gartner发布2025年数据安全领域的先锋厂商:GenAI和量子计算时代的数据安全创造性技术、产品和服务
  • 微前端架构:解构前端巨石应用的艺术
  • uniapp开发前端静态视频界面+如何将本地视频转换成网络地址
  • EI会议:第三届大数据、计算智能与应用国际会议(BDCIA 2025)
  • 9.5C++作业
  • 数据库基础知识——聚合函数、分组查询
  • MySQL 综合练习
  • 基于cornerstone3D的dicom影像浏览器 第三章 拖拽seriesItem至displayer上显示第一张dicom
  • 用户眼中的VR自来水厂之旅
  • 数据安全成焦点:基于Hadoop+Spark的信用卡诈骗分析系统实战教程
  • 瑞芯微RV1126目标识别算法Yolov8的部署应用
  • 【深入理解Batch Normalization(1)】原理与作用
  • 【教程】快速入门golang
  • Day21_【机器学习—决策树(2)—ID3树 、C4.5树、CART树】
  • std::complex
  • 深度解读:PSPNet(Pyramid Scene Parsing Network) — 用金字塔池化把“场景理解”装进分割网络
  • 【WRF-Chem】SYNMAP 土地覆盖数据概述及处理(二进制转geotiff)
  • 怎么快速构建一个deep search模型呢
  • Dify基础应用
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段(26):文法+单词第8回3 复习 +考え方6
  • Screen 三步上手
  • Pspice仿真电路:(三十六)变压器仿真
  • pydantic定义llm response数据模型
  • 开学信息收集不再愁,这个工具太省心