blob: f11e678489f451763327c3d061211d49044f49a9 [file] [log] [blame]
wuchimedes079c1632025-04-02 22:01:20 +08001package com.example.g8backend.util;
2
3import io.jsonwebtoken.*;
4import org.springframework.stereotype.Component;
5import javax.crypto.SecretKey;
6import java.util.Date;
7
8@Component
9public class JwtUtil {
10
11 private final SecretKey secretKey;
12 private final long expirationMs;
13
14 public JwtUtil(SecretKey secretKey) {
15 this.secretKey = secretKey;
16 this.expirationMs = 3600_000; // 1小时
17 }
18
19 // 生成 JWT Token
wuchimedes223bfab2025-04-04 17:16:05 +080020 public String generateToken(long userId) {
wuchimedes079c1632025-04-02 22:01:20 +080021 Date now = new Date();
22 Date expiryDate = new Date(now.getTime() + expirationMs);
23
24 return Jwts.builder()
wuchimedes223bfab2025-04-04 17:16:05 +080025 .claim("id", userId)
wuchimedes079c1632025-04-02 22:01:20 +080026 .issuedAt(now)
27 .expiration(expiryDate)
28 .signWith(secretKey, Jwts.SIG.HS256)
29 .compact();
30 }
31
32 // 验证Token并解析用户名
wuchimedes223bfab2025-04-04 17:16:05 +080033 public Long validateTokenAndGetUserId(String token) {
wuchimedes079c1632025-04-02 22:01:20 +080034 try {
35 Jws<Claims> claims = Jwts.parser()
36 .verifyWith(secretKey)
37 .build()
38 .parseSignedClaims(token);
39
wuchimedes223bfab2025-04-04 17:16:05 +080040 return claims.getPayload().get("id", Long.class);
wuchimedes079c1632025-04-02 22:01:20 +080041 } catch (JwtException e) {
42 throw new RuntimeException("Token无效或过期", e);
43 }
44 }
45}