package com.example.compileproxyserver; import io.jsonwebtoken.*; import org.springframework.stereotype.Component; import java.util.Date; @Component public class JwtUtil { private final String SECRET_KEY = "ZEDzedZeDZEdzEDzeDtechTechTEchTEChTECHsecretSECRET"; public String generateToken(String username) { return Jwts.builder() .setSubject(username) .setIssuedAt(new Date(System.currentTimeMillis())) .setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 10)) .signWith(SignatureAlgorithm.HS256, SECRET_KEY) .compact(); } public String extractUsername(String token) { return Jwts.parser() .setSigningKey(SECRET_KEY) // 使用 setSigningKey 而不是 verifyWith .build() .parseClaimsJws(token) // 使用 parseClaimsJws 而不是 parseSignedClaims .getBody() .getSubject(); } public boolean validateToken(String token, String username) { try { final String extractedUsername = extractUsername(token); return (extractedUsername.equals(username) && !isTokenExpired(token)); } catch (JwtException | IllegalArgumentException e) { throw new RuntimeException("Expired or invalid JWT token"); } } private boolean isTokenExpired(String token) { try { Claims claims = Jwts.parser() .setSigningKey(SECRET_KEY) .build() .parseClaimsJws(token) .getBody(); Date expirationDate = claims.getExpiration(); Date currentDate = new Date(); return expirationDate.before(currentDate); } catch (JwtException | IllegalArgumentException e) { // 如果解析失败或 Token 无效,则认为 Token 已过期 return true; } } public static class AuthRequest { private String username; private String password; // Getters and setters public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } public static class AuthResponse { private String token; public AuthResponse(String token) { this.token = token; } // Getter public String getToken() { return token; } } }