| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- package com.njuzr.eaibackend.utils;
- import io.jsonwebtoken.*;
- import io.jsonwebtoken.security.Keys;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.stereotype.Component;
- import java.time.Instant;
- import java.util.Date;
- import java.util.UUID;
- @Slf4j
- @Component
- public class JWTTokenUtil {
- @Value("${jwt.secret}")
- private String secret;
- @Value("${jwt.issuer}")
- private String issuer;
- @Value("${jwt.expiration}")
- private String expiration;
- /**
- * 根据用户信息生成token
- */
- public String generateToken(String username) {
- // 令牌id
- String uuid = UUID.randomUUID().toString();
- Date exprireDate = Date.from(Instant.now().plusSeconds(Long.parseLong(expiration)));
- return Jwts.builder()
- // 设置头部信息header
- .header()
- .add("typ", "JWT")
- .add("alg", "HS256")
- .and()
- // 设置自定义负载信息payload
- .claim("username", username)
- // 令牌ID
- .id(uuid)
- // 过期日期
- .expiration(exprireDate)
- // 签发时间
- .issuedAt(new Date())
- // 主题
- .subject(username)
- // 签发者
- .issuer(issuer)
- // 签名
- .signWith(Keys.hmacShaKeyFor(secret.getBytes()), Jwts.SIG.HS256)
- .compact();
- }
- /**
- * 解析token
- * @param token token
- * @return Jws<Claims>
- */
- public Jws<Claims> parseClaim(String token) {
- return Jwts.parser()
- .verifyWith(Keys.hmacShaKeyFor(secret.getBytes()))
- .build()
- .parseSignedClaims(token);
- }
- public JwsHeader parseHeader(String token) {
- return parseClaim(token).getHeader();
- }
- public Claims parsePayload(String token) {
- return parseClaim(token).getPayload();
- }
- public String parseToken(String token) {
- return parseClaim(token).getPayload().getSubject();
- }
- }
|