JWT令牌技术

article/2025/10/16 14:38:49

JWT令牌

  • 全称:JOSN Web Token(https://jwt.io/)

    • 定义了一种简介的、自包含的格式,用于在通信双方以JSON数据格式安全的传输信息。犹豫数字签名的存在,这些信息是可靠的。
  • 通过base64编码

  • JWT的组成: (JWT令牌由三个部分组成,三个部分之间使用英文的点来分割)

    • 第一部分:Header(头), 记录令牌类型(type)、签名算法(alg)等。 例如:{“alg”:“HS256”,“type”:“JWT”}

    • 第二部分:Payload(有效载荷),携带一些自定义信息、默认信息等。也会有签发日期有效期等等 例如:{“id”:“1”,“username”:“Tom”}

    • 第三部分:Signature(签名),防止Token被篡改、确保安全性。将header、payload,并加入指定秘钥,通过指定签名算法计算而来。

    签名的目的就是为了防jwt令牌被篡改,而正是因为jwt令牌最后一个部分数字签名的存在,所以整个jwt 令牌是非常安全可靠的。一旦jwt令牌当中任何一个部分、任何一个字符被篡改了,整个令牌在校验的时候都会失败,所以它是非常安全可靠的。

JWT令牌生成

需要先引入JWT的依赖:

<!-- JWT依赖-->
<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version>
</dependency>

在引入完JWT来赖后,就可以调用工具包中提供的API来完成JWT令牌的生成和校验
工具类:Jwts
生成JWT代码实现:

@Test
public void genJwt(){Map<String,Object> claims = new HashMap<>();claims.put("id",1);claims.put("username","Tom");String jwt = Jwts.builder().setClaims(claims) //自定义内容(载荷)          .signWith(SignatureAlgorithm.HS256, "itheima") //签名算法        .setExpiration(new Date(System.currentTimeMillis() + 24*3600*1000)) //有效期   .compact();System.out.println(jwt);
}

运行测试方法:

eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwiZXhwIjoxNjcyNzI5NzMwfQ.fHi0Ub8npbyt71UqLXDdLyipptLgxBUg_mSuGJtXtBk

输出的结果就是生成的JWT令牌,,通过英文的点分割对三个部分进行分割,我们可以将生成的令牌复制一下,然后打开JWT的官网,将生成的令牌直接放在Encoded位置,此时就会自动的将令牌解析出来。
在这里插入图片描述

第一部分解析出来,看到JSON格式的原始数据,所使用的签名算法为HS256。

第二个部分是我们自定义的数据,之前我们自定义的数据就是id,还有一个exp代表的是我们所设置的过期时间。

由于前两个部分是base64编码,所以是可以直接解码出来。但最后一个部分并不是base64编码,是经过签名算法计算出来的,所以最后一个部分是不会解析的。

校验JWT令牌

@Test
public void parseJwt(){Claims claims = Jwts.parser().setSigningKey("itheima")//指定签名密钥(必须保证和生成令牌时使用相同的签名密钥)  .parseClaimsJws("eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwiZXhwIjoxNjcyNzI5NzMwfQ.fHi0Ub8npbyt71UqLXDdLyipptLgxBUg_mSuGJtXtBk").getBody();System.out.println(claims);
}

运行测试方法:

{id=1, exp=1672729730}

令牌解析后,我们可以看到id和过期时间,如果在解析的过程当中没有报错,就说明解析成功了。

登录下发令牌

  1. 生成令牌
    • 在登录成功之后来生成一个JWT令牌,并且把这个令牌直接返回给前端
  2. 校验令牌
    • 拦截前端请求,从请求中获取到令牌,对令牌进行解析校验

实现步骤:

  1. 引入JWT工具类
    • 在项目工程下创建com.itheima.utils包,并把提供JWT工具类复制到该包下
  2. 登录完成后,调用工具类生成JWT令牌并返回

JWT工具类

public class JwtUtils {private static String signKey = "itheima";//签名密钥private static Long expire = 43200000L; //有效时间/*** 生成JWT令牌* @param claims JWT第二部分负载 payload 中存储的内容* @return*/public static String generateJwt(Map<String, Object> claims){String jwt = Jwts.builder().addClaims(claims)//自定义信息(有效载荷).signWith(SignatureAlgorithm.HS256, signKey)//签名算法(头部).setExpiration(new Date(System.currentTimeMillis() + expire))//过期时间.compact();return jwt;}/*** 解析JWT令牌* @param jwt JWT令牌* @return JWT第二部分负载 payload 中存储的内容*/public static Claims parseJWT(String jwt){Claims claims = Jwts.parser().setSigningKey(signKey)//指定签名密钥.parseClaimsJws(jwt)//指定令牌Token.getBody();return claims;}
}

登录成功,生成JWT令牌并返回

@RestController
@Slf4j
public class LoginController {//依赖业务层对象@Autowiredprivate EmpService empService;@PostMapping("/login")public Result login(@RequestBody Emp emp) {//调用业务层:登录功能Emp loginEmp = empService.login(emp);//判断:登录用户是否存在if(loginEmp !=null ){//自定义信息Map<String , Object> claims = new HashMap<>();claims.put("id", loginEmp.getId());claims.put("username",loginEmp.getUsername());claims.put("name",loginEmp.getName());//使用JWT工具类,生成身份令牌String token = JwtUtils.generateJwt(claims);return Result.success(token);}return Result.error("用户名或密码错误");}
}

http://chatgpt.dhexx.cn/article/axoNuKja.shtml

相关文章

2 Go语言JSON与XML解析与表单操作

2 Go语言JSON与XML解析与表单操作 1 数据交互的格式2 JSON方式2.1 JSON序列化2.2 JSON反序列化2.3 解析到interface 3 XML方式3.1 解析XML3.2 生成XML 4 字段校验5 文件上传2.1 前后端模拟上传2.2 go客户端模拟上传 3 防止重复提交 1 数据交互的格式 常见的数据交互格式有&…

C++中json解析开源库收集,支持json5

文章目录 zpl-c 库HJSONcJSONRapidJSON &#xff08;推荐&#xff09;DAW JSON Link v2JSON &#xff0c;这库稳定&#xff0c;文档齐全。(推荐)json-c &#xff08;c实现&#xff09;json_dto (一个小的头文件助手)json11 ( C11 的小型 JSON 库 )json_spirit (开发中&#xff…

SpringBoot之JWT令牌

目录 介绍 生成和校验 登录下发令牌 介绍 JWT全称&#xff1a;JSON Web Token &#xff08;官网&#xff1a;https://jwt.io/&#xff09; 定义了一种简洁的、自包含的格式&#xff0c;用于在通信双方以json数据格式安全的传输信息。由于数字签名的存在&#xff0c;这些信…

七 微服务网关gateWay和Jwt令牌

之前写过一篇微服务网关Zuul&#xff0c;今天介绍gateWay&#xff0c;二者大同小异&#xff0c;但各有优势&#xff0c;大家可以都了解一下&#xff0c;拓展自己的知识面&#xff1b; 一 微服务网关 主要作用 整合各个微服务功能&#xff0c;形成一套系统在微服务网关中实现…

登录校验-会话技术/JWT令牌

登录校验 会话技术 会话&#xff1a; 用户打开浏览器&#xff0c;访问web资源的时候&#xff0c;会话建立。直到一方断开连接&#xff0c;会话结束&#xff0c;一次会话中包含多次响应 会话跟踪&#xff1a;一种维护浏览器状态的方法&#xff0c;服务器需要识别多次请求是否来…

服务的校验Content-Type,只接收application/json格式的CSRF绕过方法

如何在JSON端点上利用CSRF漏洞 转载自&#xff1a;https://www.freebuf.com/articles/web/164234.html Alpha_h4ck &#xff08;CSRF Flash HTTP 307&#xff09;别说了&#xff0c;你已经“死”了&#xff01; 如果你想通过第三方攻击者控制的服务器在JSON端点利用一个CS…

nginx 限流,以及nginx直接返回json格式数据

高并发系统有三把利器用来保护系统&#xff1a;缓存、降级和限流 今天我们这里说说限流。一般会在应用层配合redis做限流策略&#xff0c;这里我们聊聊nginx层限流。 限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统&#xff0c;一旦达…

JWT-JSON Web令牌的深入介绍

JWT-JSON Web令牌的深入介绍 从桌面应用程序到Web应用程序或移动应用程序&#xff0c;身份验证是几乎所有应用程序中最重要的部分之一。 本教程是JWT&#xff08;JSON Web令牌&#xff09;的深入介绍&#xff0c;可帮助您了解&#xff1a; 基于会话的身份验证与基于令牌的身份…

JSON Web Token原理深入理解

什么是JWT JWT全称Json Web Token&#xff0c;翻译为JSON格式的网络令牌&#xff0c;很多时候又简称为Token(JWT是Token的一种实现方式)。它要解决的问题&#xff0c;就是为多种终端设备&#xff0c;提供统一的、安全的令牌格式。因此&#xff0c;JWT只是一个令牌格式而已&…

【JWT】jwt令牌研究

一、JWT介绍 在介绍JWT之前先看一下传统校验令牌的方法&#xff0c;如下图&#xff1a; 问题&#xff1a; 传统授权方法的问题是用户每次请求资源服务&#xff0c;资源服务都需要携带令牌访问认证服务去校验令牌的合法性&#xff0c;并根据令牌获取用户的相关信息&#xff0c…

JWT令牌验证

JWT令牌验证 jwt的由来及解决的问题JWT的工作原理JWT组成重点&#xff1a;JWT实现验证&#xff1a;4.1 首先前后端跨域配置&#xff1a;4.2 jwt配置&#xff1a;4.3 web.xml配置&#xff1a;4.4 登录成功时生成jwt令牌前端NodeJs服务器配置拦截器&#xff0c;配置在http目录下4…

如何使用JSON Web令牌(JWT)保护您的文档

如何使用JSON Web令牌&#xff08;JWT&#xff09;保护您的文档 在本文中&#xff0c;我们讲解如何使用JSON网络令牌JWT来保护在线文档免受未经授权的访问&#xff0c;从而可以更安全的把在线文档编辑器开发集成进您自己的网络应用中去。 这里将集成开源的办公套件ONLYOFFICE …

day13 SpringBoot案例3 令牌技术、登录校验

登录校验的实现思路是怎样的&#xff1f; 项目中访问核心资源&#xff0c;通常都要进行登录校验&#xff0c;访问京东商城的订单&#xff0c;必须要先登录才能访问查询 实现思路: 可以在访问资源前进行访问的拦截&#xff0c;判断你当前会话是否有登录&#xff0c;如果没有登…

pythonjson数据解析失败_json解析失败是什么意思

因为代码的不美观等因素&#xff0c;我们会使用一些解析工具进行处理&#xff0c;有些人在解析时出现了报错。解析失败需要考虑多方面的因素&#xff0c;如格式、String类型、boolean类型等原因&#xff0c;在格式上分为格式错误和格式正确两种讨论。下面就json解析失败的原因为…

Java Web Token令牌校验

前言&#xff1a;本文只涉及JWT的理论部分&#xff0c;不涉及代码 传统的用户校验可以结合cookiesession来实现&#xff0c;但是校验信息存放在服务端&#xff0c;当用户过多时会给服务器造成太大的压力&#xff0c;所以我们可以使用token进行校验&#xff0c;将用户信息加以签…

JWT令牌生成与校验

目录 1 JWT介绍1.1 什么是JWT&#xff1f;1.2 JWT令牌结构 2 配置JWT令牌服务3 生成JWT令牌4 校验JWT令牌5 JWT整合Spring Security5.1 创建表 6 配置授权服务6.1 测试 1 JWT介绍 通过上边的测试我们发现&#xff0c;当资源服务和授权服务不在一起时资源服务使用RemoteTokenSe…

信息系统基础知识(笔记)

一、信息 1.1、信息的基本概念 信息就是信息&#xff0c;既不是物质们也不是论量&#xff0c;信息是能够用来消除不确定的东西 两个概念层次&#xff1a;本体论&#xff08;客观层&#xff0c;与课客体本身因素相关&#xff0c;与主题因素无关&#xff09; 认知论&#xff0…

计算机毕业论文内容参考|基于大数据的信息物理融合系统的分析与设计方法

文章目录 导文摘要前言绪论课题背景国内外现状与趋势:课题内容:相关技术与方法介绍:系统架构设计:数据采集与处理:数据存储与管理:数据分析与挖掘:系统优化与调试:应用场景:挑战与机遇:研究方向:系统分析:系统设计:系统实现:系统测试:总结与展望:

工业4.0中的人-信息-物理系统集成(HSI):设计与评估方法

于栖洋 译 摘要:本文概述了工业4.0中集成人和信息物理系统的设计和使用空间&#xff0c;特别关注分析、设计和评估方法和阶段的相互作用。本文首先介绍了工业4.0面临的挑战&#xff0c;综述了现有的系统设计方法&#xff0c;描述了方法模型的设计和使用空间&#xff0c;并以工…

信息系统基本知识(六)

大纲 信息系统与信息化信息系统开发方法常规信息系统集成技术软件工程新一代信息技术信息系统安全技术信息化发展与应用信息系统服务管理信息系统服务规划企业首席信息管及其责任 1.7 信息化发展与应用 我国在“十三五”规划纲要中&#xff0c;将培育人工智能、移动智能终端…