blob: 972df1c95f0cef46a379a9ffcc55b803e62322cc [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
20 public String generateToken(String username) {
21 Date now = new Date();
22 Date expiryDate = new Date(now.getTime() + expirationMs);
23
24 return Jwts.builder()
25 .subject(username)
26 .issuedAt(now)
27 .expiration(expiryDate)
28 .signWith(secretKey, Jwts.SIG.HS256)
29 .compact();
30 }
31
32 // 验证Token并解析用户名
33 public String validateTokenAndGetUsername(String token) {
34 try {
35 Jws<Claims> claims = Jwts.parser()
36 .verifyWith(secretKey)
37 .build()
38 .parseSignedClaims(token);
39
40 return claims.getPayload().getSubject();
41 } catch (JwtException e) {
42 throw new RuntimeException("Token无效或过期", e);
43 }
44 }
45}