jwt token java_利用JWT生成Token

本文介绍了如何使用Java实现JWT(Json Web Token)生成Token,包括HS256对称加密和RS256非对称加密的详细步骤。通过代码实例展示了JWT的生成、验证过程,并强调了JWT的安全性和减少后端内存消耗的优势。
摘要由CSDN通过智能技术生成

开篇

实现Token的方式有很多,本篇介绍的是利用Json Web Token(JWT)生成的Token.JWT生成的Token有什么好处呢?

安全性比较高,加上密匙加密而且支持多种算法。

携带的信息是自定义的,而且可以做到验证token是否过期。

验证信息可以由前端保存,后端不需要为保存token消耗内存。

本篇分3部分进行讲解。

什么是JWT

JWT的代码实现

用HS256 对称算法加密

用RS256 非对称算法加密

总结

如果原理很难懂,没关系。可以直接看JWT的代码实现。代码已经上传github。已经对代码进行封装成工具类。可以直接使用。

什么是JWT

JSON Web Token 简称JWT。

一个JWT实际上就是一个字符串,它由三部分组成,头部、载荷与签名。

JWT生成的token是这样的

eyJpc3MiOiJKb2huI.eyJpc3MiOiJ.Kb2huIFd1IEp

生成的token,是3段,用.连接。下面有解释。

头部

用于描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等。这也可以被表示成一个JSON对象。

例如:

{

"typ": "JWT",

"alg": "HS256"

}

载荷

其实就是自定义的数据,一般存储用户Id,过期时间等信息。也就是JWT的核心所在,因为这些数据就是使后端知道此token是哪个用户已经登录的凭证。而且这些数据是存在token里面的,由前端携带,所以后端几乎不需要保存任何数据。

例如:

{

"uid": "xxxxidid", //用户id

"exp": "12121212" //过期时间

}

签名

签名其实就是:

1.头部和载荷各自base64加密后用.连接起来,然后就形成了xxx.xx的前两段token。

2.最后一段token的形成是,前两段加入一个密匙用HS256算法或者其他算法加密形成。

所以token3段的形成就是在签名处形成的。

代码实现

1.看代码前一定要知道JWT是由头部、载荷与签名组成。

2.代码已上传github,希望点个赞

代码将JWT封装成两个工具类,可以直接调用。

需要下载的jar包

com.nimbusds

nimbus-jose-jwt

6.0

HS256 对称加密

生成token

/**

* 创建秘钥

*/

private static final byte[] SECRET = "6MNSobBRCHGIO0fS6MNSobBRCHGIO0fS".getBytes();

/**

* 过期时间5秒

*/

private static final long EXPIRE_TIME = 1000 * 5;

<
JWT(JSON Web Token)是一种用于在网络应用间传递信息的安全方式。它由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。Java 17 是 Java 编程语言的最新版本,提供了许多新特性和改进。 在 Java 17 中,可以使用第三方库来生成和验证 JWT Token。常用的库包括 jjwt、Nimbus JOSE + JWT 和 Auth0 Java JWT 等。 下面是使用 jjwt生成和验证 JWT Token 的示例代码: 1. 添加依赖: ```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> ``` 2. 生成 JWT Token: ```java import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; String secretKey = "yourSecretKey"; String token = Jwts.builder() .setSubject("user123") .signWith(SignatureAlgorithm.HS256, secretKey) .compact(); ``` 3. 验证 JWT Token: ```java import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; String token = "yourToken"; String secretKey = "yourSecretKey"; Claims claims = Jwts.parser() .setSigningKey(secretKey) .parseClaimsJws(token) .getBody(); String subject = claims.getSubject(); ``` 请注意,上述代码中的 "yourSecretKey" 是用于签名和验证的密钥,可以根据实际情况进行替换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值