SpringBoot 整合 JWT——Token 认证与自动刷新
Session 方式在分布式环境下不好用JWTJSON Web Token是目前主流的无状态认证方案。服务端不需要存 SessionToken 中包含了用户信息。一、JWT 结构header.payload.signature header: 加密算法 payload: 用户数据不要放密码 signature: 签名防止篡改二、JWT 工具类ComponentpublicclassJwtUtil{Value(${jwt.secret:mySecretKey})privateStringsecret;Value(${jwt.expire:86400000})privatelongexpire;// 默认24小时publicStringgenerateToken(LonguserId,Stringusername){DatenownewDate();returnJwts.builder().setSubject(userId.toString()).claim(username,username).setIssuedAt(now).setExpiration(newDate(now.getTime()expire)).signWith(SignatureAlgorithm.HS256,secret).compact();}publicClaimsparseToken(Stringtoken){returnJwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody();}publicbooleanvalidateToken(Stringtoken){try{parseToken(token);returntrue;}catch(Exceptione){returnfalse;}}}三、登录接口RestControllerRequestMapping(/auth)publicclassAuthController{AutowiredprivateJwtUtiljwtUtil;PostMapping(/login)publicResultVOMapString,Objectlogin(RequestParamStringusername,RequestParamStringpassword){// 校验用户名密码if(!admin.equals(username)||!123456.equals(password)){returnResultVO.error(401,用户名或密码错误);}// 生成 TokenStringaccessTokenjwtUtil.generateToken(1001L,username);StringrefreshTokenjwtUtil.generateRefreshToken(1001L);MapString,ObjectresultnewHashMap();result.put(accessToken,accessToken);result.put(refreshToken,refreshToken);result.put(expiresIn,86400);returnResultVO.success(result);}}四、Token 刷新PostMapping(/refresh)publicResultVOMapString,Objectrefresh(RequestParamStringrefreshToken){if(!jwtUtil.validateToken(refreshToken)){returnResultVO.error(401,RefreshToken 无效);}ClaimsclaimsjwtUtil.parseToken(refreshToken);LonguserIdLong.parseLong(claims.getSubject());Stringusernameclaims.get(username,String.class);StringnewAccessTokenjwtUtil.generateToken(userId,username);StringnewRefreshTokenjwtUtil.generateRefreshToken(userId);returnResultVO.success(Map.of(accessToken,newAccessToken,refreshToken,newRefreshToken));}五、拦截器校验ComponentpublicclassJwtInterceptorimplementsHandlerInterceptor{AutowiredprivateJwtUtiljwtUtil;OverridepublicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsException{Stringtokenrequest.getHeader(Authorization);if(tokennull||!token.startsWith(Bearer )){thrownewBusinessException(401,未登录);}tokentoken.substring(7);if(!jwtUtil.validateToken(token)){thrownewBusinessException(401,Token 已过期);}// 将用户信息存入请求上下文ClaimsclaimsjwtUtil.parseToken(token);request.setAttribute(userId,claims.getSubject());request.setAttribute(username,claims.get(username));returntrue;}}六、前端调用// 登录constrespawaitfetch(/auth/login,{method:POST,headers:{Content-Type:application/json},body:JSON.stringify({username:admin,password:123456})});const{accessToken,refreshToken}awaitresp.json();// 后续请求携带 Tokenfetch(/api/user,{headers:{Authorization:Bearer accessToken}});// Token 过期时用 refreshToken 刷新asyncfunctionrefreshAccessToken(){constrespawaitfetch(/auth/refresh,{method:POST,body:newURLSearchParams({refreshToken})});constdataawaitresp.json();accessTokendata.accessToken;}七、安全注意事项// 1. JWT 中不要放敏感信息ClaimsclaimsJwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody();Stringpasswordclaims.get(password);// ❌ 错误// 2. 密钥不要写死用配置中心或环境变量Value(${jwt.secret})privateStringsecret;// 3. accessToken 有效期短15-30分钟// refreshToken 有效期长7天专门用来刷新 accessToken总结Session 认证服务端存 Session分布式下需要共享 Session JWT 认证 无状态Token 携带用户信息适合分布式 JWT 缺点签发后无法主动失效只能等过期 解决方案accessToken 短时效 refreshToken 刷新机制 觉得有用的话点赞 关注【张老师技术栈】吧每周更新 Java/Python/爬虫 实战干货不让你白来。

相关新闻

SpringBoot 整合 Nacos 配置中心——配置集中管理

SpringBoot 整合 Nacos 配置中心——配置集中管理

当服务数量增多时,修改一个配置要在每个服务上改一遍,非常麻烦。Nacos 配置中心可以把所有配置集中管理,修改后实时生效,无需重启。 一、部署 Nacos docker run -d \--name nacos \-p 8848:8848 \-e MODEstandalone \nacos/nacos-…

2026/7/31 6:49:13 阅读更多 →
算法面试——二叉树遍历:递归、非递归、重建二叉树

算法面试——二叉树遍历:递归、非递归、重建二叉树

二叉树遍历是算法面试的绝对基础。递归写法要熟练,非递归写法要能手撕。 一、前序遍历 void preorder(TreeNode root) {if (root null) return;System.out.print(root.val " ");preorder(root.left);preorder(root.right); }void preorderIter(TreeNode…

2026/7/31 18:47:32 阅读更多 →
HarmonyOs应用《重要日》开发第25篇 - 像素风格 UI 设计在鸿蒙中的实践

HarmonyOs应用《重要日》开发第25篇 - 像素风格 UI 设计在鸿蒙中的实践

本文从 UI 设计的角度分析 ImportantDays 项目的视觉设计语言,包括色彩体系、排版规范、卡片设计、阴影与圆角、图标使用、空状态设计,以及如何在 ArkUI 声明式 UI 中实现一致的设计风格。一、设计语言概述 ImportantDays 采用简约现代的 UI 设计风格&am…

2026/8/1 3:25:26 阅读更多 →

最新新闻

口碑良好的轻便反弹器厂家

口碑良好的轻便反弹器厂家

在家具五金配件的市场中,轻便反弹器虽小,却起着至关重要的作用。它能为家具使用带来便捷与舒适,提升整体使用体验。随着市场需求的不断增长,众多厂家纷纷入局,如何挑选到一家口碑良好的轻便反弹器厂家成为企业客户、行…

2026/8/1 4:18:24 阅读更多 →
AI模型推理Token追踪与性能优化实战指南

AI模型推理Token追踪与性能优化实战指南

你有没有遇到过这种情况:明明代码逻辑看起来没问题,模型也能正常输出结果,但就是感觉推理速度比预期慢,或者资源消耗异常高?更让人困惑的是,当你尝试定位性能瓶颈时,却发现那些关键的token消耗数…

2026/8/1 4:18:24 阅读更多 →
DankDroneDownloader终极指南:重新掌控你的无人机固件自由

DankDroneDownloader终极指南:重新掌控你的无人机固件自由

DankDroneDownloader终极指南:重新掌控你的无人机固件自由 【免费下载链接】DankDroneDownloader A Custom Firmware Download Tool for DJI Drones Written in C# 项目地址: https://gitcode.com/gh_mirrors/da/DankDroneDownloader 你是否厌倦了无人机厂商…

2026/8/1 4:18:24 阅读更多 →
LangChain开发环境配置与Deepseek模型集成实战

LangChain开发环境配置与Deepseek模型集成实战

1. LangChain开发环境全栈配置指南作为AI应用开发的热门框架,LangChain正在重塑大模型应用的构建方式。今天我将分享从零开始搭建LangChain开发环境的完整流程,包含Deepseek模型接入、LangSmith观测系统集成以及tavily搜索工具配置三大核心模块。这套组合…

2026/8/1 4:18:24 阅读更多 →
0.8米盲区意味着什么?揭秘光纤测试中的“显微镜”技术

0.8米盲区意味着什么?揭秘光纤测试中的“显微镜”技术

在OTDR的参数表里,大多数人只关注动态范围(测得远不远),却往往忽略了一个更关键的指标——盲区。在骨干网长距离测试中,动态范围确实重要;但在城域网、接入网以及数据中心内部,盲区的大小直接决…

2026/8/1 4:18:24 阅读更多 →
HC-SR04超声波测距模块:从原理到实战的嵌入式开发指南

HC-SR04超声波测距模块:从原理到实战的嵌入式开发指南

1. 项目概述:从“嘀嗒”声到精准测距搞嵌入式开发或者玩Arduino、树莓派的朋友,对HC-SR04这个蓝色或绿色的小板子肯定不陌生。它几乎是所有测距、避障、液位检测项目的“标配”传感器。我第一次接触它,是在一个自动避障小车的项目里&#xff…

2026/8/1 4:17:23 阅读更多 →

日新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/31 1:03:03 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/31 4:19:39 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →