【Spring Boot】解锁高效安全之门:登录令牌技术的实战应用与价值解析
前言**???本期讲解关于token令牌技术介绍~~~??感兴趣的小伙伴看一看小编主页-CSDN博客?? 你的点赞就是小编不断更新的最大动力??那么废话不多说直接开整吧~~目录???1.Session与Cookie??1.1实现原理??1.2集群环境情况???2.令牌技术??2.1实现校验原理??2.2优缺点??2.3JWT令牌2.3.1JWT组成2.3.2JWT令牌?成和校验2.3.3生成令牌?2.3.4密钥的生成2.3.5令牌的解析???3.令牌技术的使用??3.1令牌技术功能类??3.2controller层???4.总结### **??1.Session与Cookie#### ??1.1实现原理传统情况下 登陆把名密码提交给服务器. 服务器端验证名密码是否正确, 并返回校验结果给后端 如果密码正确, 则在服务器端创建 Session . 通过 Cookie 把 sessionId 返回给浏览器缺点**无法在集群环境下进行使用~~~#### ??1.2集群环境情况我们开发的项, 在企业中很少会部署在台机器上, 容易发单点故障. (单点故障: 旦这台服务器挂了, 整个应都没法访问了). 所以通常情况下, 个Web应会部署在多个服务器上, 通过Nginx等进负载均衡. 此时, 来个的请求就会被分发到不同的服务器上如下如所示那么为啥不能使用sessioncookie技术进行验证获取信息呢 在后端校验成功后服务器会存储session并返回sessionidsessionid存储在客户端的cookie中下次访问的时候服务器就是通过cookie中携带的sessionid来获取session信息如下所示但是存在一个问题就是1. 登录 登录请求, 经过负载均衡, 把请求转给了第台服务器, 第台服务器进账号密码 验证, 验证成功后, 把Session存在了第台服务器上2. 查询操作 登录成功之后, 携带Cookie(有SessionId)继续执查询操作, 如查询博客列 表. 此时请求转发到了第台机器, 第台机器会先进权限验证操作(通过SessionId验证是否 登录), 此时第台机器上没有该的Session, 就会出现问题此时就要使用令牌技术那么接下来小编就进行令牌技术的讲解### **??**2.令牌技术令牌其实就是个份的标识, 名称起的很上, 其实本质就是个字符串.如我们出在外, 会带着的份证, 需要验证份时, 就掏出份证份证不能伪造, 可以辨别真假#### ??2.1实现校验原理服务器具备成令牌和验证令牌的能 我们使令牌技术, 继续思考上述场景: 1. 登录 登录请求, 经过负载均衡, 把请求转给了第台服务器, 第台服务器进账号密码 验证, 验证成功后, 成个令牌, 并返回给客端. 2. 客端收到令牌之后, 把令牌存储起来. 可以存储在Cookie中, 也可以存储在其他的存储空间(如localStorage) 3. 查询操作 登录成功之后, 携带令牌继续执查询操作, 如查询博客列表. 此时请求转发到了第台机器, 第台机器会先进权限验证操作. 服务器验证令牌是否有效, 如果有效, 就说明已经执了登录操作, 如果令牌是效的, 就说明之前未执登录操作具体实现过程如下图那么此时第二个服务器进行解析过后就会拿到用户的id用户名等重要的验证的信息#### ??2.2优缺点令牌的优缺点 优点:解决了集群环境下的认证问题 减轻服务器的存储压(需在服务器端存储)缺点:需要实现(包括令牌的成, 令牌的传递, 令牌的校验)当前企业开发中, 解决会话跟踪使最多的案就是令牌技术#### ??2.3JWT令牌令牌本质就是个字符串, 他的实现式有很多, 我们采个JWT令牌来实现. 介绍 JWT全称: JSON Web Token 官:JSON Web Tokens - jwt.ioJSON Web Token(JWT)是个开放的业标准(RFC 7519), 于客端和服务器之间传递安全可靠的信息. 其本质是个token, 是种紧凑的URL安全法##### 2.3.1JWT组成JWT由三部分组成, 每部分中间使点 (.) 分隔如aaaaa.bbbbb.ccccHeader(头部) 头部包括令牌的类型即JWT及使的哈希算法如HMAC SHA256或RSAPayload(负载) 负载部分是存放有效信息的地, 是些定义内容. 如: {“userId”:“123”,“userName”:“zhangsan”} , 也可以存在jwt提供的现场字段, 如exp(过期时间戳)等. 此部分不建议存放敏感信息, 因为此部分可以解码还原原始内容.Signature(签名) 此部分于防jwt内容被篡改, 确保安全性.防被篡改, 不是防被解析. JWT之所以安全, 就是因为最后的签名. jwt当中任何个字符被篡改, 整个令牌都会校验失败. 就好我们的份证, 之所以能标识个的份, 是因为他不能被篡改, 不是因为内容加密.(任 何都可以看到份证的信息, jwt 也是##### 2.3.2JWT令牌成和校验首先得引入依赖 io.jsonwebtoken jjwt-api 0.11.5 io.jsonwebtoken jjwt-impl 0.11.5 runtime io.jsonwebtoken jjwt-jackson 0.11.5 runtime 注意在更改后要进行Maven的刷新这是非常重要的##### 2.3.3生成令牌代码如下所示 public void genJWT(){ //内容 MapString,Object claim new HashMap(); claim.put(“id” ,2); claim.put(“name” ,“lisi” ); //生成了一个JWT令牌 String token Jwts.builder().setClaims(claim). setExpiration(new Date(System.currentTimeMillis()JWT_EXPIRATION)). signWith(key). compact(); System.out.println(token); }解释令牌的生成是通过hash表来进行内容的描述setExpiration使用来表示超时时间的即在登录多久后令牌失效就得重新进行登录signWith是令牌中重要的一部分就是密钥生成的令牌在官网上进行解析后##### 2.3.4密钥的生成代码如下 public void genKey(){ SecretKey secretKey Keys.secretKeyFor(SignatureAlgorithm.HS256); String str Encoders.BASE64.encode(secretKey.getEncoded()); System.out.println(str); }解释为啥要进行密钥即签名的打印呢我们在生成令牌的时候就要添加密钥的部分方便我们后序的解析而解析也需要密钥那么此时多次生成的密钥是不一致的我们就需要将这里的密钥设置为静态变量 public static long JWT_EXPIRATION 60601000; public static String secretStr “rRu9yDe9p7EfwVm5eCuoo0Hmx5xvo0k3VSNrp9D0SA”; //转化为key类型 public static Key key Keys.hmacShaKeyFor(Decoders.BASE64.decode(secretStr));这里密钥的添加是Key类型的所以需要进行转型第一个变量就是设置的超时时间第二个变量就是我们生成的密钥我们要根据这个密钥生成令牌##### 2.3.5令牌的解析令牌的解析是要进行密钥即签名的验证是否是合法的具体的代码如下所示 public void parseToken(){ String token eyJhbGciOiJIUzI1NiJ9.eyJuYW1lIjoibGlzaSIsImlkIjoyLCJleHAiOjE3Mzg4MTgxNTV9.IF202Qv0DxM5q7yduqiSZE4wFuaghv7U_VIPr4BPxrk ; //通过key签名 JwtParser build Jwts.parserBuilder().setSigningKey(key).build(); Claims claims build.parseClaimsJws(token).getBody(); System.out.println(claims); }这里解析成功后就会得出内容否则就会报错大致就是拿着建立密钥去解析这里的令牌最后从令牌中提取出声明Claims信息并打印输出### **??**3.令牌技术的使用在我们的登录的项目中我们可以设置一个util类进行设置主要是生成密钥以及解析密钥这两个比较重要的功能#### ??3.1令牌技术功能类代码如下所示: public class JWTUtils { public static final long JWT_EXPIRATION 60601000; public static final String secretStr “nXeAgEiZZqIOPqiydZmmKGHq2AB96/9Mikgvzs0ya4”; //转化为key类型 public static final Key key Keys.hmacShaKeyFor(Decoders.BASE64.decode(secretStr)); //生成一个令牌 public static String genJWT(MapString,Object claim){ String token Jwts.builder().setClaims(claim). setExpiration(new Date(System.currentTimeMillis()JWT_EXPIRATION)). signWith(key). compact(); return token; } //解析令牌 public static Claims parseJWT(String token){ JwtParser build Jwts.parserBuilder().setSigningKey(key).build(); //解析失败与成功的情况 Claims claims; try { claims build.parseClaimsJws(token).getBody(); }catch (Exception e){ return null; } return claims; } //从token获取信息 public static Integer getIDByToken(String token){ Claims claims parseJWT(token); Integer id (Integer) claims.get(Constants.ID); if(id 0){ return id; } return null; } }这里唯一多了一个方法就是使用token解析得到的内容进行特定的内容的获取这里就是使用解析得到的用户ID并进行了校验是否合理#### ??3.2controller层代码如下所示 //如果这里的输入是正确的那么就可以返回令牌了 MapString,Object claim new HashMap(); claim.put(Constants.ID, userInfo.getId()); claim.put(Constants.USER_NAME, userInfo.getUserName()); //创建一个令牌 String token JWTUtils.genJWT(claim); return Result.success(token);解释这里要从Model层中输入用户的id以及名称放到token令牌中保存最后统一结果返回最后一步就是解析拿到 RequestMapping(“getUserInfo”) public UserInfo getUserInfo(HttpServletRequest request){ String token request.getHeader(Constants.USER_TOKEN_HEADER); Integer id JWTUtils.getIDByToken(token); if(id null){ return null; } UserInfo userInfo userService.selectById(id); return userInfo; }解释最后就是解析token令牌后拿到用户id然后进行判断id是否合理之后根据用户ID返回关于用户的所有信息###??4.总结本期小编主要讲解了关于登录验证信息返回的相关知识阐述了session与cookie在集群环境下的不足之处如何使用令牌技术解决这个问题以及包括JWT令牌技术编程实现和如何修改controller层实现此功能???~~~~最后希望与诸君共勉共同进步*???以上就是本期内容了 感兴趣的话就关注小编吧。???期待你的关注~~~**

相关新闻

Tomcat详细讲解(巨详细!!!)

Tomcat详细讲解(巨详细!!!)

tomcat的工作流程:**前言:**Tomcat是一个开源的Java Web应用服务器,Java Web应用服务器,这个概念听起来有点专业,但其实用通俗的语言来解释并不难理解。首先,我们得知道Web应用是什么。简单来说&#xff0c…

2026/10/21 12:06:21 阅读更多 →
前端竞赛解题心法:从DOM操作到状态管理的极简优雅实践

前端竞赛解题心法:从DOM操作到状态管理的极简优雅实践

1. 从“刷题”到“解题”:一个前端工程师的竞赛心法又到了蓝桥杯的季节。作为一名在Web前端领域摸爬滚打了多年的开发者,我每年都会关注这个比赛,尤其是Web应用开发组的题目。它不像纯粹的算法竞赛那样只关注时间复杂度,也不像商业…

2026/11/12 7:52:54 阅读更多 →
从strlen到memcpy:深度剖析C标准库函数的实现与优化

从strlen到memcpy:深度剖析C标准库函数的实现与优化

1. 从“会用”到“懂它”:为什么我们需要亲手实现库函数在C语言的世界里,strlen、strcpy、memcpy这些名字就像空气和水一样自然。我们每天都在用,IDE会帮我们自动补全,文档清晰地写着参数和返回值。对于一个项目来说,调…

2026/10/22 14:31:13 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/12 5:00:00 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/12 5:13:20 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/12 5:13:20 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/11 17:16:37 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/11 17:16:37 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/12 5:13:20 阅读更多 →

日新闻

周新闻

月新闻