最新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()等方法。标准声明表:

自定义声明(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"对应的值,另外两个亦然

未完待续....

  • 19
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot JJWT (JSON Web Token) 是一个用于在 Spring Boot 应用程序中实现 JWT 的库。JWT 是一种用于安全传输信息的开放标准(RFC 7519),它通过数字签名验证数据的完整性,并使用密钥对数据进行加密。 要在 Spring Boot 中使用 JJWT,您需要添加相关的依赖项到您的项目中。可以通过 Maven 或 Gradle 将以下依赖项添加到您的构建文件中: Maven 依赖项: ```xml <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-api</artifactId> <version>0.11.2</version> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-impl</artifactId> <version>0.11.2</version> <scope>runtime</scope> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt-jackson</artifactId> <version>0.11.2</version> <scope>runtime</scope> </dependency> ``` Gradle 依赖项: ``` implementation 'io.jsonwebtoken:jjwt-api:0.11.2' runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.2' runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.11.2' ``` 完成后,您可以开始在 Spring Boot 应用程序中使用 JJWT 来创建和验证 JWT。您可以使用 JJWT 的 `Jwts` 类来创建和解析 JWT。 例如,要创建一个 JWT,您可以使用以下代码: ```java import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; String secretKey = "yourSecretKey"; String jwt = Jwts.builder() .setSubject("username") .signWith(SignatureAlgorithm.HS256, secretKey) .compact(); ``` 要解析和验证 JWT,您可以使用以下代码: ```java import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; String jwt = "yourJWT"; String secretKey = "yourSecretKey"; Claims claims = Jwts.parser() .setSigningKey(secretKey) .parseClaimsJws(jwt) .getBody(); String username = claims.getSubject(); ``` 这只是 JJWT 的基本用法示例,您还可以使用 JJWT 来处理更复杂的 JWT 操作,如设置过期时间、添加自定义声明等。 希望这能帮到你!如果有其他问题,请随时问我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值