欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > 最新JJWT 0.12.6学习

最新JJWT 0.12.6学习

2024/10/24 1:53:45 来源:https://blog.csdn.net/weixin_43443913/article/details/140420314  浏览:    关键词:最新JJWT 0.12.6学习

本文参考的是jjwt官方github,链接在此,本文会持续跟进jjwt的最新版本

GitHub - jwtk/jjwt: Java JWT: JSON Web Token for Java and Android

简介

JJWT(Java JWT)是Java平台上相当流行的用于生成Json Web Token的库,其更新速度非常快,导致网上许多教程在如今看来都已经过时。本文将对最新的JJWT官方github页进行个人的中文解释,力求做到与官方同步。

名词解释

JWT

Java Web Token 一种通用的基于文本的信息传递格式,可用于传递任意类型的数据

JWS

JSON Web Signature 对JSON数据结构进行签名的标准,用于确保数据完整和来源的真实性

JWE

JSON Web Encryption 对JSON数据结构进行加密的标准,用于确保数据的机密性

JWS和JWE的区别在于,

  1. JWS中的数据是可以被任何人查看的,其只能够保证信息在传递过程中未被篡改;
  2. JWE则保护了数据不被未授权方查看,也能够保证信息未被篡改,因此数据涉及到隐私时应当使用JWE。

声明(Claim)

在许多场景下,开发者习惯使用JSON的负载(payload)来表示用户或主机或其他的身份概念的数据。这种情况下的负载(payload)就称为声明(Claim)。大家常用的比如说用户名/ip地址等都可以归属到声明之中。

标准声明(standard claim)

在RFC7519标准中,存在着数个标准声明(standard claim)。这些Claims并非强制性要求。JJWT为每一个标准声明都提供了方便的构造方法。例如subject()iss()等方法。标准声明表:

  • issuer: sets the iss(Issuer) Claim
  • subject: sets the sub(Subject) Claim
  • audience: sets the aud(Audience) Claim
  • expiration: sets the exp(Expiration Time) Claim
  • notBefore: sets the nbf(Not Before) Claim
  • issuedAt: sets the iat(Issued At) Claim
  • id: sets the jti(JWT ID) Claim

自定义声明(Custom Claims)

毫无疑问,jjwt也是支持自定义声明的,使用Claim()方法即可在payload中插入自己想要的键值对

快速开始

使用JJWT进行JWS生成

// key生成部分
SecretKey key = Jwts.SIG.HS256.key().build();//jws生成部分
String jws = Jwts.builder().subject("Joe").claim("name","Mike")	.claim("address","Beijing").signWith(key).compact();

key生成部分

首先SecretKey key = Jwts.SIG.HS256.key().build();

进行调试可以看到,生成的是一个SecertKey对象,包含两个属性:keyalgorithmkey随机生成的一个HMAC密钥,algorithm则说明当前使用的签名算法。需要保管好这个key,后续的jws解析也需要用到它.

jws生成部分

然后是jws生成部分上文生成的的jws是一条JWS,

.claim("name","Mike")指payload中新增一条"name":"Mike"的键值对

.claim("address","Beijing")用于指出claim()方法是可以多次重复使用的

.subject("Joe")指payload中的键sub的值为"Joe"

.signWith(key)指使用生成的key进行签名

.compact()指将其压缩为String格式

使用JJWT进行JWS解析

// jws解析
Jws<Claims> claims= Jwts.parser().verifyWith(key).build().parseSignedClaims(jws);System.out.println(claims.getPayload().get("sub"));
System.out.println(claims.getPayload().get("name"));
System.out.println(claims.getPayload().get("address"));

.verifyWith(key)指的是选用解析jws用的key,上面用过,此处调用即可

.paraseSignedClaims(jws)指选用jws这个字符串进行解析

得到一个Jws<Claims>类型的对象claims

claims.getPayload().get("sub")指从payload中获取键"sub"对应的值,另外两个亦然

未完待续....

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com