JWT(一):认识 JSON WebToken
JWT(二):使用 Java 实现 JWT
介绍
原理在上篇《JWT(一):认识 JSON Web Token》已经说过了,实现起来并不难,你可以自己写一个 jwt 工具类(如果你有兴趣的话)
当然了,重复造轮子不是程序员的风格,我们主张拿来主义!
JWT 官网提供了多种语言的 JWT 库,详情可以参考 https://jwt.io/#debugger 页面下半部分
建议使用 jjwt库 ,它的github地址 https://github.com/jwtk/jjwt
jjwt 版本 0.10.7,它和 0.9.x 有很大的区别,一定要注意!!!
本文分5部分
- 第1部分:以简单例子演示生成、验证、解析 jwt 过程
- 第2部分:介绍 jjwt 的常用方法
- 第3部分:封装一个常用的 jwt 工具类
如果只是拿来主义,看到这里就可以了 - 第4部分:介绍 jjwt 的各种签名算法
- 第5部分:对 jwt 进行安全加密
简单例子
引入 MAVN 依赖
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-api</artifactId>
<version>0.10.7</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-impl</artifactId>
<version>0.10.7</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt-jackson</artifactId>
<version>0.10.7</version>
<scope>runtime</scope>
</dependency>
一个例子
// 生成密钥
String key = "0123456789_0123456789_0123456789";
SecretKey secretKey = new SecretKeySpec(key.getBytes(), SignatureAlgorithm.HS256.getJcaName());
// 1. 生成 token
String token = Jwts.builder() // 创建 JWT 对象
.setSubject("JSON Web Token") // 设置主题(声明信息)
.signWith(secretKey) // 设置安全密钥(生成签名所需的密钥和算法)
.compact(); // 生成token(1.编码 Header 和 Payload 2.生成签名 3.拼接字符串)
System.out.println(token);
//token = token + "s";
// 2. 验证token,如果验证token失败则会抛出异常
try {
Jwts.parser()
.setSigningKey(secretKey)
.pars