Update JwtHelper.java

main
pveayojnc 4 months ago
parent ec15593a84
commit 6326377e7e

@ -1,99 +1,152 @@
package com.zsz.util;
// 导入 JWT 相关的类,用于处理 JWT 的创建、解析等操作
import io.jsonwebtoken.*;
// 导入 Spring 框架的字符串工具类,用于判断字符串是否为空
import org.springframework.util.StringUtils;
// 导入日期类,用于处理时间相关的操作
import java.util.Date;
/**
* JwtHelper JWTJSON Web Token
* JWT
*/
public class JwtHelper {
private static long tokenExpiration = 24*60*60*1000;
// 定义 JWT 令牌的过期时间,这里设置为 24 小时,单位为毫秒
private static long tokenExpiration = 24 * 60 * 60 * 1000;
// 定义 JWT 令牌的签名密钥,用于对令牌进行签名和验证
private static String tokenSignKey = "123456";
//生成token字符串
/**
* JWT
* @param userId ID
* @param userType
* @return JWT
*/
public static String createToken(Long userId, Integer userType) {
// 使用 Jwts 构建器创建 JWT 令牌
String token = Jwts.builder()
// 设置 JWT 的主题
.setSubject("YYGH-USER")
// 设置 JWT 的过期时间,当前时间加上 tokenExpiration
.setExpiration(new Date(System.currentTimeMillis() + tokenExpiration))
// 在 JWT 中添加用户 ID 的声明
.claim("userId", userId)
// 注释掉的代码,可用于添加用户名的声明
// .claim("userName", userName)
// 在 JWT 中添加用户类型的声明
.claim("userType", userType)
// 使用 HS512 算法和签名密钥对 JWT 进行签名
.signWith(SignatureAlgorithm.HS512, tokenSignKey)
// 对 JWT 进行 GZIP 压缩
.compressWith(CompressionCodecs.GZIP)
// 构建最终的 JWT 令牌字符串
.compact();
return token;
}
//从token字符串获取userid
/**
* JWT ID
* @param token JWT
* @return ID null
*/
public static Long getUserId(String token) {
if(StringUtils.isEmpty(token)) return null;
// 判断令牌是否为空
if (StringUtils.isEmpty(token)) return null;
// 使用签名密钥解析 JWT 令牌
Jws<Claims> claimsJws = Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token);
// 获取 JWT 中的声明信息
Claims claims = claimsJws.getBody();
Integer userId = (Integer)claims.get("userId");
// 从声明中获取用户 ID
Integer userId = (Integer) claims.get("userId");
// 将用户 ID 转换为 Long 类型并返回
return userId.longValue();
}
//从token字符串获取userType
/**
* JWT
* @param token JWT
* @return null
*/
public static Integer getUserType(String token) {
if(StringUtils.isEmpty(token)) return null;
Jws<Claims> claimsJws
= Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token);
// 判断令牌是否为空
if (StringUtils.isEmpty(token)) return null;
// 使用签名密钥解析 JWT 令牌
Jws<Claims> claimsJws = Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token);
// 获取 JWT 中的声明信息
Claims claims = claimsJws.getBody();
return (Integer)(claims.get("userType"));
// 从声明中获取用户类型并返回
return (Integer) (claims.get("userType"));
}
//从token字符串获取userName
/**
* JWT
* @param token JWT
* @return
*/
public static String getUserName(String token) {
if(StringUtils.isEmpty(token)) return "";
Jws<Claims> claimsJws
= Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token);
// 判断令牌是否为空
if (StringUtils.isEmpty(token)) return "";
// 使用签名密钥解析 JWT 令牌
Jws<Claims> claimsJws = Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token);
// 获取 JWT 中的声明信息
Claims claims = claimsJws.getBody();
return (String)claims.get("userName");
// 从声明中获取用户名并返回
return (String) claims.get("userName");
}
//判断token是否有效
public static boolean isExpiration(String token){
/**
* JWT
* @param token JWT
* @return true false
*/
public static boolean isExpiration(String token) {
try {
// 解析 JWT 令牌并获取过期时间,判断是否在当前时间之前
boolean isExpire = Jwts.parser()
.setSigningKey(tokenSignKey)
.parseClaimsJws(token)
.getBody()
.getExpiration().before(new Date());
//没有过期有效返回false
// 没有过期,有效,返回 false
return isExpire;
}catch(Exception e) {
//过期出现异常返回true
} catch (Exception e) {
// 过期出现异常,返回 true
return true;
}
}
/**
* Token
* @param token
* @return
* JWT
* @param token JWT
* @return JWT null
*/
public String refreshToken(String token) {
String refreshedToken;
try {
// 解析原 JWT 令牌获取声明信息
final Claims claims = Jwts.parser()
.setSigningKey(tokenSignKey)
.parseClaimsJws(token)
.getBody();
// 使用原令牌中的用户 ID 和用户类型重新生成新的 JWT 令牌
refreshedToken = JwtHelper.createToken(getUserId(token), getUserType(token));
} catch (Exception e) {
// 刷新失败,返回 null
refreshedToken = null;
}
return refreshedToken;
}
/**
* JWT
* @param args
*/
public static void main(String[] args) {
// 示例代码,可用于生成令牌并获取其中的信息
// String token = JwtHelper.createToken(1L, "lucy");
// System.out.println(token);
// System.out.println(JwtHelper.getUserId(token));
// System.out.println(JwtHelper.getUserName(token));
}
}
}
Loading…
Cancel
Save