1.工具类中有两个方法,一个方法生成令牌,另一个是解析令牌。
2.生成令牌时使用的秘钥可以通过base解析
3.令牌的过期时间设置12小时。
工具类代码:
java
package com.itheima.utils;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import java.util.Date;
import java.util.Map;
/**
* JWT 令牌操作工具类
*/
public class JwtUtils {
// 1. 密钥:沿用测试类中的密钥
private static final String SECRET_KEY = "aXRoZWltYQ==";
// 2. 过期时间:12小时 (12 * 60 * 60 * 1000 毫秒)
//private static final Long EXPIRE_TIME = 43200000L;
private static final long EXPIRATION_TIME = 12 * 60 * 60 * 1000;
/**
* 生成 JWT 令牌
*
* @param claims 自定义载荷数据 (如 id, username 等)
* @return 生成的 JWT 字符串
*/
public static String generateToken(Map<String, Object> claims) {
return Jwts.builder()
.signWith(SignatureAlgorithm.HS256, SECRET_KEY) // 指定签名算法和密钥
.addClaims(claims) // 添加自定义信息
.setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME)) // 设置过期时间
.compact(); // 生成令牌
}
/**
* 解析 JWT 令牌
*
* @param token 待解析的 JWT 字符串
* @return Claims 对象,包含令牌中的信息
*/
public static Claims parseToken(String token) {
return Jwts.parser()
.setSigningKey(SECRET_KEY) // 指定密钥
.parseClaimsJws(token) // 解析令牌
.getBody(); // 获取载荷信息
}
}