JWT的使用

server/2024/11/27 2:37:58/

目录

1.介绍

1.1为什么会有Jwt出现?

1.2什么是Jwt?

2.使用Jwt

2.1导入依赖

2.2创建Jwt方法

2.3解析jwt方法

2.4判断Jwt是否正确

2.5测试

2.6完整使用步骤


1.介绍

1.1为什么会有Jwt出现?

       在聊Jwt之前,我们先聊聊不使用前后端分离使用spring业务开发,页面资源都在resource目录下。那么在做登录的时候,我们往往会将用户信息存入session当中,进入页面之前判断是否有session,有就放行,没有就让你登录。但是如果spring前后端分离了,那么就不能存session,并且cookie和session要禁用,为什么?因为Spring mvc跨域配置中,默认是不允许携带cookie与头信息,sessionID又是保存在cookie里面,cookie都拿不到,那session就不用多说。关键还是跨域问题,浏览器默认对跨域请求的 Cookie 设置有限制SameSite 策略可能会阻止跨域发送 Cookie。但是使用 Token(如 JWT)可以通过 HTTP 标头(如 Authorization)传递,不受跨域限制,从而代替session与cookie

1.2什么是Jwt?

       jwt可以理解为是一个将身份信息加密后生成很长的字符串,加密算法可以自由选择。并且可以设置过期时间。常用于身份验证和信息交换场景,通常由三部分组成,Header(头部),Payload有效(载荷),Signature(签名)。他的工作原理就是后端生成jwt,前端接收到后存入本地比如浏览器的local storage,后续每次请求都会将信息放在请求头中,后端通过请求头取出来解析判断jwt是否正确,并做出相对于的策略

2.使用Jwt

2.1导入依赖

        <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-api</artifactId><version>0.12.5</version></dependency><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-impl</artifactId><version>0.12.5</version></dependency><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-jackson</artifactId><version>0.12.5</version></dependency>

2.2创建Jwt方法

其实如果真正想用,只需要.claims(加密的内容),.signWith(加密的算法),builder.expiration()设置过期时间。其余的都是规范问题,核心就是设置这三个就可以用。

java">/*** 创建token* @param payload 数据载体* @param ttl 过期时间* @return JWT*/public static String createToken(Map<String, Object> payload, long ttl) {JwtBuilder builder = Jwts.builder()//采用HS256加密算法对JWT进行签名.signWith(Jwts.SIG.HS256.key().random(new SecureRandom(SECRET.getBytes())).build())//JWT的唯一标识.id(UUID.randomUUID().toString())//设置载体内容.claims(payload)//设置签发人.issuer("org.xxx")//主题.subject("JWT_AUTH")//JWT颁发时间.issuedAt(new Date());//设置过期时间if(ttl >= 0) {builder.expiration(getExpDate(ttl));}//创建JWTreturn builder.compact();}
​/*** 计算过期时间* @param ttl* @return*/private static Date getExpDate(long ttl) {Date expDate = new Date(System.currentTimeMillis() + ttl);System.out.println("Token过期时间:" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(expDate));return expDate;}

2.3解析jwt方法

怎么加密,那就怎么解析。算法必须一致。

java">/*** 解析token,获取载体数据* @param token JWT* @param type 载体数据的类型* @return* @param <T>*/public static <T> T parseToken(String token, String name, Class<T> type) {return Jwts.parser().verifyWith(Jwts.SIG.HS256.key().random(new SecureRandom(SECRET.getBytes())).build()).build().parseSignedClaims(token).getPayload().get(name, type);}

2.4判断Jwt是否正确

java"> /*** 校验token* @param token*/public static void verify(String token) {Jwts.parser().verifyWith(Jwts.SIG.HS256.key().random(new SecureRandom(SECRET.getBytes())).build()).build().parseSignedClaims(token);}

2.5测试

java">public static void main(String[] args) {Map<String, Object> payload = new HashMap<>();payload.put("name", "user1");System.out.println(JwtUtils.createToken(payload, 1000 * 60 * 60 * 24));}

2.6完整使用步骤

1.登录成功在service层调用createToken方法,完成生成给vo一并返回给前端。

2.前端通过请求回调获取jwt,并保存在local storage中。

3.每次请求都从local storage取出jwt,放在请求头中发给后端。

4.后端就可以通过拦截器获取请求头的信息,为了全文使用,后端可以将请求信息存入到session作用域中。


http://www.ppmy.cn/server/145210.html

相关文章

鸢尾花植物的结构认识和Python中scikit-learn工具包的安装

鸢尾花植物的结构认识和Python中scikit-learn工具包的安装 鸢尾花植物的结构认识和Python中scikit-learn工具包的安装 鸢尾花植物的结构认识和Python中scikit-learn工具包的安装一、鸢尾花的认识1.1 对花结构和功能认识1.2、鸢尾花认识1.2.1 鸢尾花种类1.2.2 鸢尾花结构 二. Py…

MySQL索引原理

2.1 索引概述 2.1.1 介绍 索引&#xff08;index&#xff09;是帮助MySQL高效获取数据的数据结构(有序)。在数据之外&#xff0c;数据库系统还维护着满足 特定查找算法的数据结构&#xff0c;这些数据结构以某种方式引用&#xff08;指向&#xff09;数据&#xff0c; 这样就…

论 ONLYOFFICE:开源办公套件的深度探索

公主请阅 引言第一部分&#xff1a;ONLYOFFICE 的历史背景1.1 开源软件的崛起1.2 ONLYOFFICE 的发展历程 第二部分&#xff1a;ONLYOFFICE 的核心功能2.1 文档处理2.2 电子表格2.3 演示文稿 第三部分&#xff1a;技术架构与兼容性3.1 技术架构3.2 兼容性 第四部分&#xff1a;部…

五天SpringCloud计划——DAY1之mybatis-plus的使用

一、引言 咱也不知道为啥SpringCloud课程会先教mybatis-plus的使用&#xff0c;但是教都教了&#xff0c;就学了吧&#xff0c;学完之后觉得mybatis-plus中的一些方法还是很好用了&#xff0c;本文作为我学习mybatis-plus的总结提升&#xff0c;希望大家看完之后也可以熟悉myba…

[debug]不同的window连接ubuntu的vscode后无法正常加载kernel

不同的window连接ubuntu后vscode后无法正常加载kernel 进入conda环境重新安装kernel&#xff1a; pip uninstall ipython jupyter ipykernel pip install ipython jupyter ipykernel -i https://pypi.tuna.tsinghua.edu.cn/simple

uniapp+vue2重新进入小程序就清除缓存,设备需要重新扫码

代码 app.vue页面 <script>export default {onLaunch: function() {uni.removeStorageSync(equiId)}} </script>

裸金属服务器能够帮助企业解决哪些问题?

随着网络科技的快速发展&#xff0c;企业业务也在不断的进行扩张和复杂化&#xff0c;传统的服务已经无法满足企业对于高性能和高稳定性的需求&#xff0c;而裸金属服务器则能够帮助企业来解决这一问题&#xff0c;下面我们就来具体看一下吧&#xff01; 裸金属服务器能够允许应…

python VS c++

一、语法特点 Python&#xff1a; 语法简洁、优雅&#xff0c;代码可读性极强&#xff0c;采用缩进来表示代码块&#xff0c;摒弃了像 C 那样使用大括号的传统方式&#xff0c;使得代码看上去十分清晰简洁。例如&#xff1a; ​ if 5 > 3:print("5大于3") elif 5 …