/*JwtUtil是一个用于生成和解析JWT(JSON Web Token)的工具类。*/
public class JwtUtil {
/**
* 生成jwt
* 使用Hs256算法, 私匙使用固定秘钥
*
* @param secretKey jwt秘钥
* @param ttlMillis jwt过期时间(毫秒)
* @param claims 设置的信息
* @return
*/
public static String createJWT(String secretKey, long ttlMillis, Map<String, Object> claims) {
// 指定签名的时候使用的签名算法,也就是header那部分
/*首先指定了签名算法为Hs256,然后生成了JWT的过期时间。*/
SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
// 生成JWT的时间
long expMillis = System.currentTimeMillis() + ttlMillis;
Date exp = new Date(expMillis);
// 设置jwt的body
/*接下来,使用JwtBuilder对象设置了JWT的声明(claims)、签名算法和秘钥,并设置了过期时间。*/
JwtBuilder builder = Jwts.builder()
// 如果有私有声明,一定要先设置这个自己创建的私有的声明,这个是给builder的claim赋值,一旦写在标准的声明赋值之后,就是覆盖了那些标准的声明的
.setClaims(claims)
// 设置签名使用的签名算法和签名使用的秘钥
.signWith(signatureAlgorithm, secretKey.getBytes(StandardCharsets.UTF_8))
// 设置过期时间
.setExpiration(exp);
/*最后,通过调用builder.compact()方法生成最终的JWT字符串,并返回*/
return builder.compact();
}
/**
* Token解密
*
* @param secretKey jwt秘钥 此秘钥一定要保留好在服务端, 不能暴露出去, 否则sign就可以被伪造, 如果对接多个客户端建议改造成多个
* @param token 加密后的token
* @return
*/
public static Claims parseJWT(String secretKey, String token) {
// 得到DefaultJwtParser
/*在parseJWT方法中,使用Jwts.parser()创建了一个DefaultJwtParser对象,并设置了签名的秘钥*/
Claims claims = Jwts.parser()
// 设置签名的秘钥
.setSigningKey(secretKey.getBytes(StandardCharsets.UTF_8))
// 设置需要解析的jwt
/*然后,通过调用parseClaimsJws(token).getBody()方法解析JWT,并返回解析后的Claims对象。*/
.parseClaimsJws(token).getBody();
return claims;
}
}
JwtUtil是一个用于生成和解析JWT(JSON Web Token)的工具类
最新推荐文章于 2025-04-15 17:54:02 发布