remove @springbootTest
Change-Id: Iea186ebd05298d2804b7c6b418581e2cc935fab7
diff --git a/src/main/java/com/example/g8backend/util/JwtUtil.java b/src/main/java/com/example/g8backend/util/JwtUtil.java
new file mode 100644
index 0000000..972df1c
--- /dev/null
+++ b/src/main/java/com/example/g8backend/util/JwtUtil.java
@@ -0,0 +1,45 @@
+package com.example.g8backend.util;
+
+import io.jsonwebtoken.*;
+import org.springframework.stereotype.Component;
+import javax.crypto.SecretKey;
+import java.util.Date;
+
+@Component
+public class JwtUtil {
+
+ private final SecretKey secretKey;
+ private final long expirationMs;
+
+ public JwtUtil(SecretKey secretKey) {
+ this.secretKey = secretKey;
+ this.expirationMs = 3600_000; // 1小时
+ }
+
+ // 生成 JWT Token
+ public String generateToken(String username) {
+ Date now = new Date();
+ Date expiryDate = new Date(now.getTime() + expirationMs);
+
+ return Jwts.builder()
+ .subject(username)
+ .issuedAt(now)
+ .expiration(expiryDate)
+ .signWith(secretKey, Jwts.SIG.HS256)
+ .compact();
+ }
+
+ // 验证Token并解析用户名
+ public String validateTokenAndGetUsername(String token) {
+ try {
+ Jws<Claims> claims = Jwts.parser()
+ .verifyWith(secretKey)
+ .build()
+ .parseSignedClaims(token);
+
+ return claims.getPayload().getSubject();
+ } catch (JwtException e) {
+ throw new RuntimeException("Token无效或过期", e);
+ }
+ }
+}