jjwt使用说明-笔记

jjwt官网链接:https://github.com/jwtk/jjwt

POM 依赖

<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-api</artifactId><version>0.12.3</version>
</dependency>
<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-impl</artifactId><version>0.12.3</version><scope>runtime</scope>
</dependency>
<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-jackson</artifactId> <!-- or jjwt-gson if Gson is preferred --><version>0.12.3</version><scope>runtime</scope>
</dependency>
<!-- Uncomment this next dependency if you are using:
- JDK 10 or earlier, and you want to use RSASSA-PSS (PS256, PS384, PS512) signature algorithms.  
- JDK 10 or earlier, and you want to use EdECDH (X25519 or X448) Elliptic Curve Diffie-Hellman encryption.
- JDK 14 or earlier, and you want to use EdDSA (Ed25519 or Ed448) Elliptic Curve signature algorithms.    
It is unnecessary for these algorithms on JDK 15 or later.
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk18on</artifactId> or bcprov-jdk15to18 on JDK 7
<version>1.76</version>
<scope>runtime</scope>
</dependency>
-->

生成token

PS: 基本和java-jwt使用一致。只是最新的jjwt舍弃了一些api,换了新的api

① 标准载荷:
JwtBuilder为JWT规范中定义的标准载荷提供了方便的构建器方法。
● issuer: sets the iss(Issuer) Claim jwt签发者
● subject: sets the sub(Subject) Claim jwt针对的用户
● audience: sets the aud(Audience) Claim 校验jwt的一方
● expiration: sets the exp(Expiration Time) Claim jwt过期时间
● notBefore: sets the nbf(Not Before) Claim 定义在某个时间前该jwt是不可用的
● issuedAt: sets the iat(Issued At) Claim 签发时间
● id: sets the jti(JWT ID) Claim jwt的唯一身份标识,作一次性token,防重放攻击。
② 自定义载荷:
● claime(key,value)
● claime(Map对象)

// 创建token密钥的key,并且使用 HMAC-SHA-256 加密算法
private static SecretKey key = Jwts.SIG.HS256.key().build();/*** 生成token* @return*/
public static String genToken(){// 2. 构建jwt,将签发人设置为joe,并且使用密钥将签名jwt生成为jwsString jws =  Jwts.builder().subject("Joe").  // setSubject 设置jwt针对的用户issuer("张三").   // issuer 签发人claim("name","zhangsan"). // 自定义载荷数据claim("role","admin"). // 自定义载荷数据signWith(key).   // token加签认证expiration(new Date(System.currentTimeMillis()+7200*1000)). // 设置token过期时间为2Hcompact();  // 生成token字符串return jws;
}

生成token的两句核心代码:

SecretKey key = Jwts.SIG.HS256.key().build();
Jwts.builder().setSubject("Joe").signWith(key).compact();

验证解析token

 /*** token 校验* @param key  密钥* @param token jws* @return*/
public static String checkToken(SecretKey key,String token ){String msg = null;try {Jws<Claims> claimsJws = Jwts.parser().verifyWith(key).build().parseSignedClaims(token);// 获取载荷的一些数据信息Claims payload = claimsJws.getPayload(); // payload 为一个map对象String issuer = payload.getIssuer();Date expiration = payload.getExpiration();String name = (String)payload.get("name");String role = (String)payload.get("role");// 测试就直接打印出去了...System.out.println("标准载荷:issuer===>"+issuer+"\texpiration=>"+expiration + "自定义载荷数据:"+name+"\t"+role);return "token正确";} catch (SignatureException se) {msg = "密钥错误";return  msg;}catch (MalformedJwtException me) {msg = "密钥算法或者密钥转换错误";return  msg;}catch (MissingClaimException mce) {msg = "密钥缺少校验数据";return  msg;}catch (ExpiredJwtException mce) {msg = "密钥已过期";return  msg;}catch (JwtException jwte) {msg = "密钥解析错误";return  msg;}
}

完整代码

package jwt_test;import io.jsonwebtoken.*;
import io.jsonwebtoken.security.SignatureException;
import javax.crypto.SecretKey;
import java.util.Date;/*** jjwt*/
public class JJwtUtils {// 创建token密钥的key,并且使用 HMAC-SHA-256 加密算法private static SecretKey key = Jwts.SIG.HS256.key().build();/*** 生成token* @return*/public static String genToken(){// 2. 构建jwt,将签发人设置为joe,并且使用密钥将签名jwt生成为jwsString jws =  Jwts.builder().subject("Joe").  // setSubject 设置jwt针对的用户issuer("张三").   // issuer 签发人claim("name","zhangsan"). // 自定义载荷数据claim("role","admin"). // 自定义载荷数据signWith(key).   // token加签认证expiration(new Date(System.currentTimeMillis()+7200*1000)). // 设置token过期时间为2Hcompact();  // 生成token字符串return jws;}/*** token 校验* @param key  密钥* @param token jws* @return*/public static String checkToken(SecretKey key,String token ){String msg = null;try {Jws<Claims> claimsJws = Jwts.parser().verifyWith(key).build().parseSignedClaims(token);// 获取载荷的一些数据信息Claims payload = claimsJws.getPayload(); // payload 为一个map对象String issuer = payload.getIssuer();Date expiration = payload.getExpiration();String name = (String)payload.get("name");String role = (String)payload.get("role");// 测试就直接打印出去了...System.out.println("标准载荷:issuer===>"+issuer+"\texpiration=>"+expiration + "自定义载荷数据:"+name+"\t"+role);return "token正确";} catch (SignatureException se) {msg = "密钥错误";return  msg;}catch (MalformedJwtException me) {msg = "密钥算法或者密钥转换错误";return  msg;}catch (MissingClaimException mce) {msg = "密钥缺少校验数据";return  msg;}catch (ExpiredJwtException mce) {msg = "密钥已过期";return  msg;}catch (JwtException jwte) {msg = "密钥解析错误";return  msg;}}/*** 	测试*/public static void main(String[] args) {String token = genToken();System.out.println(token);// 断言测试// assert Jwts.parser().verifyWith(key).build().parseSignedClaims(token).getPayload().getSubject().equals("Joe");String res = checkToken(key, token);System.out.println(res);}}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/164916.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华纳云:linux中vsz和rss有哪些区别

在Linux中&#xff0c;VSZ(Virtual Set Size)和RSS(Resident Set Size)是两个用于描述进程内存使用的指标&#xff0c;它们表示不同方面的内存情况。 1. VSZ&#xff08;Virtual Set Size&#xff09;: VSZ 表示进程的虚拟内存大小。 包括进程使用的所有内存&#xff0c;包括实…

Python中的函数

一、函数参数与返回值基础知识 1、不要使用可变类型&#xff08;list等&#xff09;作为参数默认值&#xff0c;用None来代替。 参数默认值只会在函数定义阶段被创建一次&#xff0c;之后无论创建多少次&#xff0c;函数内拿到的默认值都是同一个对象&#xff0c;为规避这个问…

Vue 2.0源码分析-数据驱动

Vue.js 一个核心思想是数据驱动。所谓数据驱动&#xff0c;是指视图是由数据驱动生成的&#xff0c;我们对视图的修改&#xff0c;不会直接操作 DOM&#xff0c;而是通过修改数据。它相比我们传统的前端开发&#xff0c;如使用 jQuery 等前端库直接修改 DOM&#xff0c;大大简化…

【python学习】基础篇-常用模块-collections模块:数据结构,如列表、元组、字典和集合等

Python中的collections模块提供了一些有用的数据结构&#xff0c;如列表、元组、字典和集合等。 以下是collections模块中一些常用数据结构的用法&#xff1a; Counter类 Counter类是一个字典子类&#xff0c;用于计数可哈希对象。 它可以接受一个可迭代对象作为参数&#xff…

Atlassian Confluence 路径遍历和命令执行漏洞 (CVE-2019-3396)

漏洞描述 Confluence 是由澳大利亚软件公司 Atlassian 开发的基于 Web 的企业 wiki。 Atlassian Confluence 6.14.2 版本之前存在一个未经授权的目录遍历漏洞&#xff0c;攻击者可以使用 Velocity 模板注入读取任意文件或执行任意命令。 漏洞环境及漏洞利用 启动docker环境…

快来考试拿证书!KubeSphere 个人技能专业考试认证上线啦!

以容器技术和容器编排为基础的云原生应用&#xff0c;被越来越多的企业用户接受和使用&#xff0c;并且在生产环境中使用容器技术的比例逐年增加。Kubernetes 无疑已经成为容器编排的事实基础&#xff0c;而依托于 Kubernetes 开发的开源容器平台 KubeSphere 也收获了一众拥趸。…

vue3使用provider+ inject直接将参数由祖宗传送给孙子

如题。在vue项目中&#xff0c;如果祖宗想将参数传递给孙子甚至更小一辈的组件&#xff0c;是一件麻烦事。可以通过爷爷-儿子-孙子-曾孙这样的链条&#xff0c;一辈辈地传承下去&#xff0c;但未免太繁琐、太蠢了些&#xff1b;也可以通过store间接传送&#xff0c;但如何触发孙…

9-什么是迭代器,生成器,装饰器、django的信号用过吗?如何用,干过什么、什么是深拷贝,什么是浅拷贝,如何使用、slice操作符和list构造函数

1 什么是迭代器&#xff0c;生成器&#xff0c;装饰器 2 django的信号用过吗&#xff1f;如何用&#xff0c;干过什么 3 什么是深拷贝&#xff0c;什么是浅拷贝&#xff0c;如何使用 3.1 浅拷贝 3.2 深拷贝 3.3 扩展(slice操作符和list构造函数) 1 什么是迭代器&#xff0c;生成…

14 redis全量复制与部分复制

1、设置主服务器的地址和端口 首先是在从服务器设置需要同步的主服务器信息&#xff0c;包括机器IP, 端口。 主从复制的开启&#xff0c;完全是在从节点发起的。不需要我们在主节点做任何事情。 从节点开启主从复制&#xff0c;有3种方式 配置文件&#xff1a;在从服务器的配…

【神印王座】龙皓晨美妆胜过月夜,魔神皇识破无视,撮合月夜阿宝

Hello,小伙伴们&#xff0c;我是拾荒君。 《神印王座》国漫第82集已更新&#xff0c;拾荒君和大多数人一样&#xff0c;更新就去看了。魔神皇枫秀&#xff0c;威严凛然&#xff0c;突然空降月魔宫&#xff0c;整个宫殿都在这股无与伦比的强大气息中颤栗。为了顺利躲避魔神皇的…

稻谷飘香金融助力——建行江门市分行助力乡村振兴

7月的台山&#xff0c;稻谷飘香。在大耕户李胜业的农田里&#xff0c;金灿灿的稻谷翻起层层稻浪&#xff0c;收割机在稻浪里来回穿梭&#xff0c;割稻、脱粒、装车等工序一气呵成。空气中弥漫着丰收的喜悦。 夏粮迎丰收的背后&#xff0c;是中国建设银行江门市分行&#xff08…

远端WWW服务支持TRACE请求

安全扫描的时候&#xff0c;扫出来的问题&#xff0c;这里不分享如何处理&#xff0c;就只分享下&#xff0c;如何找到有问题的端口。 通过命令 curl -v -X TRACE -I ip:port&#xff0c;这里的ip和端口就是扫描出有问题的服务器地址ip以及开放的服务端口。 观察返回值&#x…

Python基础:生成器(Generators)和生成器表达式(Generator Expressions)详解

生成器&#xff08;Generators&#xff09;和 生成器表达式&#xff08;Generator Expressions&#xff09;是 Python 中用于处理迭代器和序列数据的强大工具。它们允许你按需生成值&#xff0c;而不是一次性生成所有值&#xff0c;从而节省内存和提高性能。 1. 生成器&#x…

深度强化学习笔记与无线通信应用案例

这里写自定义目录标题 参考资料比较和分类基础知识16.3 有模型学习16.3.1 策略评估递归形式&#xff1a;Bellman 等式 16.3.2 策略改进16.3.3 策略迭代16.3.3 值迭代 16.4 免模型学习on-policy off-policy16.4.1 蒙特卡罗强化学习16.4.2 时序差分学习Sarsa算法&#xff1a;同策…

睡前随笔记录

一个人从出生到长大&#xff0c;就像一部手机从新用到旧。手机里面积累了太多的缓存&#xff0c;积累了太多的照片&#xff0c;各种app的数据&#xff0c;安装了各式各样的程序。 所以大概这就是年纪越大&#xff0c;记性越差的原因吗&#xff1f;就像一个屋子&#xff0c;堆满…

TableStructureRec: 表格结构识别推理库来了

目录 引言lineless_table_rec: 无线表格识别库安装使用结果 wired_table_rec&#xff1a;有线表格识别库安装使用结果 写在最后 引言 TableStructureRec 仓库是用来对文档中表格做结构化识别的推理库&#xff0c;包括来自 PaddleOCR 的表格结构识别算法模型、来自阿里读光有线…

新版Testwell CTC++代码覆盖率测试工具带来哪些新变化?

代码覆盖率测试工具Testwell CTC在版本10中引入了新的工具ctcreport来直接从符号和数据文件生成HTML报告。详细的特性描述可以在测试井CTC帮助中找到。在本文档中&#xff0c;描述了与前一代报告相比的改进和变化。 Adaptable Layout可调整布局 您可以选择一个适合于项目结构的…

scanf的返回值

总所周知&#xff0c;scanf是C提供的库函数的内容&#xff0c;而绝大多数定义的函数都会有一个返回值。 那么scanf的返回值是什么呢&#xff1f; 查了CPP的解释后&#xff0c;返回值就是返回的是scanf读取的数据的个数。 这个概念可能比较抽象。先看如下示例&#xff1a; 我们…

QT QJsonObject 插入 QByteArray十六进制数据

场景描述 有一组十六进制数使用QByteArray进行存储&#xff1b;需要将其插入QJsonObject&#xff0c;然后通过网络发送出去&#xff1b;接收到后&#xff0c;再转换回QByteArray&#xff1b; 操作代码 1. QByteArray转换QString插入QJsonObject QString str ""; …

io500 压测

目的 编译环境 centos 7.9安装包 yum groupinstall Development\ Tools yum install -y libevent-devel hwloc-devel libcephfs-devel.x86_64 编译 open mpi 下载地址 https://www.open-mpi.org/software/ompi/v5.0/编译 rpmbuild --rebuild openmpi-4.1.6-1.src.rpm安装…