From 70d2a5d0f9c6951b2d4cac954041ed73582ff7eb Mon Sep 17 00:00:00 2001 From: liujie <1793218484@qq.com> Date: 星期一, 09 六月 2025 11:54:00 +0800 Subject: [PATCH] 6.9新增登录失败冻结逻辑 --- springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/JWTTokenUtil.java | 173 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 173 insertions(+), 0 deletions(-) diff --git a/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/JWTTokenUtil.java b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/JWTTokenUtil.java new file mode 100644 index 0000000..73fd123 --- /dev/null +++ b/springcloud_k8s_panzhihuazhihuishequ/common/src/main/java/com/panzhihua/common/utlis/JWTTokenUtil.java @@ -0,0 +1,173 @@ +package com.panzhihua.common.utlis; + +import java.io.Serializable; +import java.util.Date; +import java.util.HashMap; +import java.util.Map; + +import org.springframework.stereotype.Component; + +import com.panzhihua.common.constants.TokenConstant; +import com.panzhihua.common.model.vos.LoginUserInfoVO; + +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; + +/** + * 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(LoginUserInfoVO 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, LoginUserInfoVO 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(LoginUserInfoVO 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); + } + +} -- Gitblit v1.7.1