Hutool JWT 工具类 - JWTUtil
# Hutool JWT 工具类 - JWTUtil
介绍
JWTUtil
是 Hutool 提供的一个快捷工具类,简化了 JWT 的生成、解析和验证操作。通过 JWTUtil
,我们可以更方便地进行 JWT 相关的操作,无需手动构建 JWT 对象或管理签名细节。
# 核心功能
JWTUtil
主要包含以下三大功能:
- JWT 创建
- JWT 解析
- JWT 验证
# JWT 创建
使用 JWTUtil.createToken
方法可以快捷生成 JWT。该方法接受一个 Map(存储载荷数据)和一个密钥用于签名。
代码示例
import cn.hutool.jwt.JWTUtil;
import java.util.HashMap;
import java.util.Map;
public class JwtUtilExample {
public static void main(String[] args) {
// 创建载荷数据,Map 形式,存放需要在 JWT 中传递的信息
Map<String, Object> payload = new HashMap<String, Object>() {
private static final long serialVersionUID = 1L;
{
put("uid", 123); // 用户ID
put("expire_time", System.currentTimeMillis() + 1000 * 60 * 60 * 24 * 15); // 过期时间,15天后
}
};
// 使用密钥生成 JWT,密钥为字节数组
String token = JWTUtil.createToken(payload, "1234".getBytes());
// 打印生成的 JWT
System.out.println("Generated Token: " + token);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
关键点解析:
payload
:Map 类型,用于存储载荷(Payload)数据。可以包含任意的键值对,如用户信息、权限等。JWTUtil.createToken
:用于生成 JWT,传入载荷 Map 和密钥(byte[] 类型)。密钥是生成签名的必要参数。
# JWT 解析
通过 JWTUtil.parseToken
方法,可以将 JWT 字符串解析为 JWT
对象,进而获取 Header 和 Payload 中的信息。
代码示例
import cn.hutool.jwt.JWT;
import cn.hutool.jwt.JWTUtil;
public class JwtUtilExample {
public static void main(String[] args) {
// JWT 字符串
String token = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9." +
"eyJzdWIiOiIxMjM0NTY3ODkwIiwiYWRtaW4iOnRydWUsIm5hbWUiOiJsb29seSJ9." +
"U2aQkC2THYV9L0fTN-yBBI7gmo5xhmvMhATtu8v0zEA";
// 解析 JWT 字符串
JWT jwt = JWTUtil.parseToken(token);
// 获取 Header 信息
String type = jwt.getHeader("typ"); // JWT 类型
String algorithm = jwt.getHeader("alg"); // 签名算法 HS256
// 获取 Payload 信息
String subject = jwt.getPayload("sub"); // 获取用户信息
String name = jwt.getPayload("name"); // 获取用户名
Boolean isAdmin = jwt.getPayload("admin"); // 是否为管理员
// 打印解析结果
System.out.println("Type: " + type);
System.out.println("Algorithm: " + algorithm);
System.out.println("Subject: " + subject);
System.out.println("Name: " + name);
System.out.println("Is Admin: " + isAdmin);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
关键点解析:
JWTUtil.parseToken
:用于解析 JWT 字符串,返回一个JWT
对象,可以从中获取 Header 和 Payload 的具体内容。getHeader
和getPayload
:分别用于获取 JWT 的头部信息和载荷信息。
# JWT 验证
使用 JWTUtil.verify
方法可以验证 JWT 的签名是否正确,确保数据未被篡改。该方法接收 JWT 字符串和密钥作为参数。
代码示例
import cn.hutool.jwt.JWTUtil;
public class JwtUtilExample {
public static void main(String[] args) {
// 待验证的 JWT
String token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9." +
"eyJ1c2VyX25hbWUiOiJhZG1pbiIsInNjb3BlIjpbImFsbCJdLCJleHAiOjE2MjQwMDQ4MjIsInVzZXJJZCI6MSwiYXV0aG9yaXRpZXMiOlsiUk9MRV_op5LoibLkuozlj7ciLCJzeXNfbWVudV8xIiwiUk9MRV_op5LoibLkuIDlj7ciLCJzeXNfbWVudV8yIl0sImp0aSI6ImQ0YzVlYjgwLTA5ZTctNGU0ZC1hZTg3LTVkNGI5M2FhNmFiNiIsImNsaWVudF9pZCI6ImhhbmR5LXNob3AifQ." +
"aixF1eKlAKS_k3ynFnStE7-IRGiD5YaqznvK2xEjBew";
// 验证签名,密钥为字节数组
boolean isValid = JWTUtil.verify(token, "123456".getBytes());
// 输出验证结果
System.out.println("Is Valid: " + isValid);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
关键点解析:
JWTUtil.verify
:验证 JWT 的签名,确保数据完整性。传入 JWT 字符串和密钥,返回布尔值表示验证结果。
总结
JWTUtil
作为 Hutool 中的快捷工具类,简化了 JWT 的生成、解析和验证操作,特别适合在开发中快速集成 JWT 功能。使用时,需特别注意密钥的管理和载荷数据的存储,确保安全性和可靠性。
编辑此页 (opens new window)
上次更新: 2024/12/28, 18:32:08