JWTTokenUtil.java 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package com.njuzr.eaibackend.utils;
  2. import io.jsonwebtoken.*;
  3. import io.jsonwebtoken.security.Keys;
  4. import lombok.extern.slf4j.Slf4j;
  5. import org.springframework.beans.factory.annotation.Value;
  6. import org.springframework.stereotype.Component;
  7. import java.time.Instant;
  8. import java.util.Date;
  9. import java.util.UUID;
  10. @Slf4j
  11. @Component
  12. public class JWTTokenUtil {
  13. @Value("${jwt.secret}")
  14. private String secret;
  15. @Value("${jwt.issuer}")
  16. private String issuer;
  17. @Value("${jwt.expiration}")
  18. private String expiration;
  19. /**
  20. * 根据用户信息生成token
  21. */
  22. public String generateToken(String username) {
  23. // 令牌id
  24. String uuid = UUID.randomUUID().toString();
  25. Date exprireDate = Date.from(Instant.now().plusSeconds(Long.parseLong(expiration)));
  26. return Jwts.builder()
  27. // 设置头部信息header
  28. .header()
  29. .add("typ", "JWT")
  30. .add("alg", "HS256")
  31. .and()
  32. // 设置自定义负载信息payload
  33. .claim("username", username)
  34. // 令牌ID
  35. .id(uuid)
  36. // 过期日期
  37. .expiration(exprireDate)
  38. // 签发时间
  39. .issuedAt(new Date())
  40. // 主题
  41. .subject(username)
  42. // 签发者
  43. .issuer(issuer)
  44. // 签名
  45. .signWith(Keys.hmacShaKeyFor(secret.getBytes()), Jwts.SIG.HS256)
  46. .compact();
  47. }
  48. /**
  49. * 解析token
  50. * @param token token
  51. * @return Jws<Claims>
  52. */
  53. public Jws<Claims> parseClaim(String token) {
  54. return Jwts.parser()
  55. .verifyWith(Keys.hmacShaKeyFor(secret.getBytes()))
  56. .build()
  57. .parseSignedClaims(token);
  58. }
  59. public JwsHeader parseHeader(String token) {
  60. return parseClaim(token).getHeader();
  61. }
  62. public Claims parsePayload(String token) {
  63. return parseClaim(token).getPayload();
  64. }
  65. public String parseToken(String token) {
  66. return parseClaim(token).getPayload().getSubject();
  67. }
  68. }