Update JwtHelper.java

main
pveayojnc 4 months ago
parent ec15593a84
commit 6326377e7e

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