关于苍穹外卖中JWT 令牌知识总结Token 和 JWT 前置知识TokenToken 本质就是后端发给前端的一串字符串作为登录通行证。前端登录成功拿到它之后每次请求接口在请求头带上这串字符串后端识别你已经登录了允许访问。Token 有很多的实现方式比如 SessionIdJWT 等JWT 是一种特定结构的 Token 字符串三段构成Header记录加密算法比如 HS 256Payload载荷claims存放业务数据比如员工 id、过期时间等Signature 签名校验 Header 和 Payload 有没有被篡改计算公式Signature HMAC-SHA256( Header Payload secretKey )其中 secretKey 是 yml 中配置的 itcast。苍穹外卖员工登录完整流程串起 JWT员工账号密码登录校验成功后端准备 Payload存入 employeeId设置过期时间后端读取 yml 的 secretKeyitcast根据 Header、Payload、itcast 计算签名拼接三段 →生成 JWT 字符串把这个 JWT 字符串返回前端这个字符串在代码里就叫 token前端保存 token后续访问接口请求头带上token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9......后端 JWT 拦截器从请求头取出 tokenJWT 字符串拆分三段取出 Header、Payload、Signature用同样的密钥 itcast拿 HeaderPayload 重新计算一遍签名对比新算出来的签名 和 token 自带的签名✅ 相等没有被篡改。再判断是否过期。解析 Payload 拿到 employeeId存入 BaseContext放行。❌ 不相等Payload 被人改过直接拦截。用代码方式解释EmployeeControllerPostMapping(/login) public ResultEmployeeLoginVO login(RequestBody EmployeeLoginDTO employeeLoginDTO) { log.info(员工登录{}, employeeLoginDTO); Employee employee employeeService.login(employeeLoginDTO); //登录成功后生成jwt令牌 MapString, Object claims new HashMap(); claims.put(JwtClaimsConstant.EMP_ID, employee.getId()); String token JwtUtil.createJWT( jwtProperties.getAdminSecretKey(), jwtProperties.getAdminTtl(), claims); EmployeeLoginVO employeeLoginVO EmployeeLoginVO.builder() .id(employee.getId()) .userName(employee.getUsername()) .name(employee.getName()) .token(token) .build(); return Result.success(employeeLoginVO); }claims是 JWT 载荷payload也就是存在 token 里面的数据数据结构是 hashmap键值对 EMP_ID–employeeId这里存了 employee 的 id⚠️claims 中的数据并不是加密所以不要放手机号等敏感信息createJWT是调用 JwtUtil 工具类预制的方法来生成 token实现代码如下/** * 生成JWT字符串 * param secretKey 签名密钥yml里的 itcast * param ttlMillis 过期时长单位毫秒7200000 2小时 * param claims 载荷存放业务数据比如员工id * return JWT字符串就是我们代码里说的token */ public static String createJWT(String secretKey, long ttlMillis, MapString, Object claims) { // 指定签名的时候使用的签名算法也就是header那部分 SignatureAlgorithm signatureAlgorithm SignatureAlgorithm.HS256; // 生成JWT的过期时间 long expMillis System.currentTimeMillis() ttlMillis; Date exp new Date(expMillis); // 设置jwt的body JwtBuilder builder Jwts.builder() // 放入自定义载荷业务数据比如employeeId .setClaims(claims) // 设置签名算法 密钥secretKey .signWith(signatureAlgorithm, secretKey.getBytes(StandardCharsets.UTF_8)) // 设置过期时间 .setExpiration(exp); // 拼接成三段式JWT字符串返回 return builder.compact(); }其中 controller 层中的jwtProperties.getAdminSecretKey(),jwtProperties.getAdminTtl(),分别代表JWT 签名重要组成部分 secretKey和过期时间这两个是在 yml 中配置的sky: jwt: # 设置jwt签名加密时使用的秘钥 admin-secret-key: itcast # 设置jwt过期时间 admin-ttl: 7200000 # 设置前端传递过来的令牌名称 admin-token-name: token在此强调itcast 的意义我们需要知道首先 itcast 是是一串固定的密码密钥是整个后端项目共用的所有管理员用户都共用这同一个密钥不是某一个人的专属标识生成 token 时候需要签名payloadheader而签名是使用 HeaderPayloaditcast 做 HS256 加密生成的Payload 就是 claimsemployeeId是 token 的具体数据而在校验 token 的时候拦截器拿到前端传的 token拿 itcast 因为 itcast 不会变化计算签名itcastpayloadheader和 token 中的第三段原来的签名如果是签名一致合法不一致不合法拒绝访问通过后再校验过期时间解析出empId存入BaseContext放行请求。请求结束后清理ThreadLocal。
企业数字化 ERP 产品动态
相关推荐
搞定空间寄语:前端高薪必备的5个高频面试题 搞定空间寄语:前端高薪必备的5个高频面试题 别再用“Hello World”糊弄自己了。很多学员学完语法,对着空白文档发呆,根本不知道怎么把零散的代码拼成一个能跑的项目。更扎心的是,面试官问起 高频面试题… · 2026/9/23 15:44:19
学术写作AI:破解黑话,提升论文可读性与影响力 1. 项目概述:当学术写作遇上"人话革命"去年审阅某核心期刊投稿时,我遇到一篇让我哭笑不得的论文——作者用"基于多维度认知框架的跨模态表征重构"来描述"用不同方法分析数据",通篇充斥着"后现代性话语解构… · 2026/9/23 15:44:13
LPDDR5内存训练全流程解析:从ZQ校准到周期重训练的工程实践 简介:面向内存控制器设计与嵌入式系统开发工程师,系统讲解LPDDR5内存的初始化与完整训练流程。内容涵盖上电初始化时序、ZQ校准(含输出驱动器阻抗校准与CA/DQ ODT阻抗校准)、命令总线训练、WCK与CK对齐、WCK占空比训练、读门控训练… · 2026/9/23 15:44:13
手把手教你用Arduino和光电二极管DIY一台光功率计 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 11:20:31
手把手教你用OpenStock搭建开源股票行情分析系统 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 11:20:24
京东技术总监立规周三不加班:拒绝无效忙碌,考核要看人效 一位40岁、被同行公认的技术大牛,在京东带团队时定下一条规矩:周三不加班,雷打不动,下班去过自己的生活。帖子一出,评论区很快热闹起来。当加班时长仍被不少企业当作奋斗标尺,这条规矩显得有些另类。它牵出… · 2026/9/24 11:20:24
机器人运动控制20个核心技术:从PID整定到多轴同步的工程实践 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 11:20:17
56G PAM4 SerDes RX设计:32路交织SAR ADC架构与校准实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/24 11:20:17
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44