TokenUtils.java 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package com.zhentao.system.utils;
  2. import io.jsonwebtoken.Claims;
  3. import io.jsonwebtoken.Jwts;
  4. import io.jsonwebtoken.SignatureAlgorithm;
  5. import java.util.Date;
  6. import java.util.HashMap;
  7. import java.util.Map;
  8. public class TokenUtils {
  9. // 密钥,生产环境应该从配置文件中读取
  10. private static final String SECRET_KEY = "your-secret-key-here";
  11. // Token有效期(毫秒),这里设置为24小时
  12. private static final long EXPIRATION_TIME = 24 * 60 * 60 * 1000;
  13. /**
  14. * 生成JWT Token
  15. * @param userId 用户ID
  16. * @return JWT Token
  17. */
  18. public static String generateToken(String userId) {
  19. Map<String, Object> claims = new HashMap<>();
  20. claims.put("userId", userId);
  21. return Jwts.builder()
  22. .setClaims(claims)
  23. .setSubject(userId)
  24. .setIssuedAt(new Date(System.currentTimeMillis()))
  25. .setExpiration(new Date(System.currentTimeMillis() + EXPIRATION_TIME)) // 修正此处
  26. .signWith(SignatureAlgorithm.HS512, SECRET_KEY)
  27. .compact();
  28. }
  29. /**
  30. * 从Token中获取用户ID
  31. * @param token JWT Token
  32. * @return 用户ID
  33. */
  34. public static String getUserIdFromToken(String token) {
  35. try {
  36. Claims claims = Jwts.parser()
  37. .setSigningKey(SECRET_KEY)
  38. .parseClaimsJws(token)
  39. .getBody();
  40. return claims.get("userId", String.class);
  41. } catch (Exception e) {
  42. // 处理Token解析异常
  43. e.printStackTrace();
  44. return null;
  45. }
  46. }
  47. /**
  48. * 验证Token是否有效
  49. * @param token JWT Token
  50. * @return 是否有效
  51. */
  52. public static boolean validateToken(String token) {
  53. try {
  54. Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token);
  55. return true;
  56. } catch (Exception e) {
  57. // 处理Token验证异常
  58. e.printStackTrace();
  59. return false;
  60. }
  61. }
  62. /**
  63. * 从Token中获取所有Claims
  64. * @param token JWT Token
  65. * @return Claims
  66. */
  67. private static Claims getAllClaimsFromToken(String token) {
  68. return Jwts.parser()
  69. .setSigningKey(SECRET_KEY)
  70. .parseClaimsJws(token)
  71. .getBody();
  72. }
  73. /**
  74. * 检查Token是否已过期
  75. * @param token JWT Token
  76. * @return 是否过期
  77. */
  78. private static boolean isTokenExpired(String token) {
  79. Date expiration = getAllClaimsFromToken(token).getExpiration();
  80. return expiration.before(new Date());
  81. }
  82. }