package com.zhentao.system.utils; import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import java.util.Date; import java.util.HashMap; import java.util.Map; public class TokenUtils { // 密钥,生产环境应该从配置文件中读取 private static final String SECRET_KEY = "your-secret-key-here"; // Token有效期(毫秒),这里设置为24小时 private static final long EXPIRATION_TIME = 24 * 60 * 60 * 1000; /** * 生成JWT Token * @param userId 用户ID * @return JWT Token */ public static String generateToken(String userId) { Map claims = new HashMap<>(); claims.put("userId", userId); return Jwts.builder() .setClaims(claims) .setSubject(userId) .setIssuedAt(new Date(System.currentTimeMillis())) .setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME)) // 修正此处 .signWith(SignatureAlgorithm.HS512, SECRET_KEY) .compact(); } /** * 从Token中获取用户ID * @param token JWT Token * @return 用户ID */ public static String getUserIdFromToken(String token) { try { Claims claims = Jwts.parser() .setSigningKey(SECRET_KEY) .parseClaimsJws(token) .getBody(); return claims.get("userId", String.class); } catch (Exception e) { // 处理Token解析异常 e.printStackTrace(); return null; } } /** * 验证Token是否有效 * @param token JWT Token * @return 是否有效 */ public static boolean validateToken(String token) { try { Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token); return true; } catch (Exception e) { // 处理Token验证异常 e.printStackTrace(); return false; } } /** * 从Token中获取所有Claims * @param token JWT Token * @return Claims */ private static Claims getAllClaimsFromToken(String token) { return Jwts.parser() .setSigningKey(SECRET_KEY) .parseClaimsJws(token) .getBody(); } /** * 检查Token是否已过期 * @param token JWT Token * @return 是否过期 */ private static boolean isTokenExpired(String token) { Date expiration = getAllClaimsFromToken(token).getExpiration(); return expiration.before(new Date()); } }