package com.dg.core.manager;
|
|
import com.dg.core.db.gen.entity.HuaChengSysUser;
|
import io.jsonwebtoken.Claims;
|
import io.jsonwebtoken.Jwts;
|
import io.jsonwebtoken.SignatureAlgorithm;
|
import org.springframework.stereotype.Component;
|
|
import java.io.Serializable;
|
import java.util.Date;
|
import java.util.HashMap;
|
import java.util.Map;
|
|
/**
|
* token验证处理
|
*
|
* @author ruoyi
|
*/
|
@Component
|
public class JWTTokenUtil implements Serializable {
|
/**
|
* 从数据声明生成令牌
|
*
|
* @param claims
|
* 数据声明
|
* @return 令牌
|
*/
|
private static String generateToken(Map<String, Object> claims) {
|
Date expirationDate = new Date(System.currentTimeMillis() + TokenConstant.EXPIRETIME_LONG * 60 * 1000 * 72);
|
return Jwts.builder().setClaims(claims).setExpiration(expirationDate)
|
.signWith(SignatureAlgorithm.HS512, TokenConstant.SECRET).compact();
|
}
|
|
/**
|
* 生成刷新token
|
*
|
* @param claims
|
* tokenbody
|
* @return refreshtoken
|
*/
|
private static String generateTokenRefreshToken(Map<String, Object> claims) {
|
Date expirationDate = new Date(System.currentTimeMillis() + TokenConstant.EXPIRETIME_REFRESH * 60 * 60 * 1000);
|
return Jwts.builder().setClaims(claims).setExpiration(expirationDate)
|
.signWith(SignatureAlgorithm.HS512, TokenConstant.SECRET).compact();
|
}
|
|
/**
|
* 从令牌中获取数据声明
|
*
|
* @param token
|
* 令牌
|
* @return 数据声明
|
*/
|
public static Claims getClaimsFromToken(String token) {
|
Claims claims;
|
try {
|
claims = Jwts.parser().setSigningKey(TokenConstant.SECRET).parseClaimsJws(token).getBody();
|
} catch (Exception e) {
|
claims = null;
|
}
|
return claims;
|
}
|
|
/**
|
* 生成令牌
|
*
|
* @param loginUserInfoVO
|
* 用户
|
* @return 令牌
|
*/
|
public static String generateToken(HuaChengSysUser loginUserInfoVO) {
|
Map<String, Object> claims = new HashMap<>(2);
|
claims.put("sub", loginUserInfoVO.getUserId());
|
claims.put("created", new Date());
|
claims.put("type", loginUserInfoVO.getType());
|
return generateToken(claims);
|
}
|
|
/**
|
* 从令牌中获取用户名
|
*
|
* @param token
|
* 令牌
|
* @return 用户名
|
*/
|
public static String getUsernameFromToken(String token) {
|
String username;
|
try {
|
Claims claims = getClaimsFromToken(token);
|
username = claims.getSubject();
|
} catch (Exception e) {
|
username = null;
|
}
|
return username;
|
}
|
|
/**
|
* 判断令牌是否过期
|
*
|
* @param token
|
* 令牌
|
* @return 是否过期
|
*/
|
public static Boolean isTokenExpired(String token) {
|
try {
|
Claims claims = getClaimsFromToken(token);
|
Date expiration = claims.getExpiration();
|
return expiration.before(new Date());
|
} catch (Exception e) {
|
return true;
|
}
|
}
|
|
/**
|
* 刷新令牌
|
*
|
* @param token
|
* 原令牌
|
* @return 新令牌
|
*/
|
public static String refreshToken(String token) {
|
String refreshedToken;
|
try {
|
Claims claims = getClaimsFromToken(token);
|
claims.put("created", new Date());
|
refreshedToken = generateToken(claims);
|
} catch (Exception e) {
|
refreshedToken = null;
|
}
|
return refreshedToken;
|
}
|
|
/**
|
* 验证令牌
|
*
|
* @param token
|
* 令牌
|
* @param loginUserInfoVO
|
* 用户
|
* @return 是否有效
|
*/
|
public static Boolean validateToken(String token, HuaChengSysUser loginUserInfoVO) {
|
String username = getUsernameFromToken(token);
|
return (username.equals(loginUserInfoVO.getUserId()) && !isTokenExpired(token));
|
}
|
|
public static void main(String[] args) {
|
Claims claims = JWTTokenUtil.getClaimsFromToken(
|
"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOjIsInR5cGUiOjEsImV4cCI6MTYwNjM1NzkzOSwiY3JlYXRlZCI6MTYwNjM1NjEzOTEzN30.zIj31TLHk4B9F45OszrJWfOlhZL5CWviP2RgsFP6LZuci6MlPn0iVbekioP01DRsu59mWd5FMyhd9WLvMtfxMg");
|
Boolean tokenExpired = JWTTokenUtil.isTokenExpired(
|
"eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOjIsInR5cGUiOjEsImV4cCI6MTYwNjM2MDQzNSwiY3JlYXRlZCI6MTYwNjM1ODYzNTI3MX0.7R3SG6hu-sr_KiPpgepubl_1FdaooCNJ0URHWv6Jynr7m8JIar2kUAnhHfWOfHrNILQb5Q-nqxceXdavcuVOXg");
|
System.out.println(claims);
|
}
|
|
/**
|
* 生成刷新token
|
*
|
* @param loginUserInfoVO
|
* 登录用户基本信息
|
* @return refreshtoken
|
*/
|
public static String generateRefeshToken(HuaChengSysUser loginUserInfoVO) {
|
Map<String, Object> claims = new HashMap<>(2);
|
claims.put("sub", loginUserInfoVO.getUserId());
|
claims.put("created", new Date());
|
claims.put("type", loginUserInfoVO.getType());
|
return generateTokenRefreshToken(claims);
|
}
|
|
}
|