From 49fea21571a4060aa8570cbf220088352e2ccf15 Mon Sep 17 00:00:00 2001
From: zhizhijie <zhizhijie@users.noreply.gitee.com>
Date: 星期三, 16 九月 2026 17:33:01 +0800
Subject: [PATCH] docs(工作日结): 补记 2026-09-16 收工记录(origin 已推 80e0879、gitea 仍不通、未提交项与明日计划)
---
traffic-audit-server/src/main/java/com/trafficaudit/security/utils/JwtUtils.java | 38 +++++++++++++++++++++++++++++++++++---
1 files changed, 35 insertions(+), 3 deletions(-)
diff --git a/traffic-audit-server/src/main/java/com/trafficaudit/security/utils/JwtUtils.java b/traffic-audit-server/src/main/java/com/trafficaudit/security/utils/JwtUtils.java
index 1941595..214ca79 100644
--- a/traffic-audit-server/src/main/java/com/trafficaudit/security/utils/JwtUtils.java
+++ b/traffic-audit-server/src/main/java/com/trafficaudit/security/utils/JwtUtils.java
@@ -3,9 +3,13 @@
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
+import io.jsonwebtoken.impl.TextCodec;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
+import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
@@ -13,11 +17,27 @@
@Component
public class JwtUtils {
+ private static final Logger log = LoggerFactory.getLogger(JwtUtils.class);
+
@Value("${jwt.secret}")
private String secret;
@Value("${jwt.expiration}")
private Long expiration;
+
+ /**
+ * 绛惧悕瀵嗛挜瀛楄妭锛歫jwt 0.9.x 榛樿鎶� secret 褰� Base64 瑙g爜锛岃嫢閰嶇疆鎴愪腑鏂囩瓑闈炴硶 Base64 浼氬湪鐧诲綍鏃舵姏
+ * ArrayIndexOutOfBoundsException锛岃〃鐜颁负銆岀櫥褰曟帴鍙� 500銆嶃�傝繖閲屽仛鍏滃簳锛氳兘鎸� Base64 瑙g爜灏辩敤瑙g爜缁撴灉
+ * 锛堜笌鍘嗗彶 token 鍏煎锛夛紝鍚﹀垯鎸� UTF-8 瀛楄妭澶勭悊锛屽苟鎶婃彁绀烘墦鍒版棩蹇楅噷銆�
+ */
+ private byte[] secretKeyBytes() {
+ try {
+ return TextCodec.BASE64.decode(secret);
+ } catch (Exception e) {
+ log.warn("jwt.secret 涓嶆槸鍚堟硶鐨� Base64 瀛楃涓诧紝宸叉寜 UTF-8 瀛楄妭浣滀负绛惧悕瀵嗛挜锛涘缓璁敼鎴� 32 浣嶉殢鏈哄崄鍏繘鍒朵覆銆�");
+ return secret.getBytes(StandardCharsets.UTF_8);
+ }
+ }
public String generateToken(String username) {
Map<String, Object> claims = new HashMap<>();
@@ -27,22 +47,34 @@
.setSubject(username)
.setIssuedAt(new Date())
.setExpiration(new Date(System.currentTimeMillis() + expiration))
- .signWith(SignatureAlgorithm.HS256, secret)
+ .signWith(SignatureAlgorithm.HS256, secretKeyBytes())
.compact();
}
public String getUsernameFromToken(String token) {
- Claims claims = Jwts.parser().setSigningKey(secret)
+ Claims claims = Jwts.parser().setSigningKey(secretKeyBytes())
.parseClaimsJws(token).getBody();
return claims.getSubject();
}
public boolean validateToken(String token) {
try {
- Jwts.parser().setSigningKey(secret).parseClaimsJws(token);
+ Jwts.parser().setSigningKey(secretKeyBytes()).parseClaimsJws(token);
return true;
} catch (Exception e) {
return false;
}
}
+
+ /** 浠� Authorization: Bearer xxx 璇锋眰澶磋В鏋愮敤鎴峰悕锛涙棤鏁堣繑鍥� null */
+ public String resolveUsername(String authorizationHeader) {
+ if (authorizationHeader == null || !authorizationHeader.startsWith("Bearer ")) {
+ return null;
+ }
+ try {
+ return getUsernameFromToken(authorizationHeader.substring(7));
+ } catch (Exception e) {
+ return null;
+ }
+ }
}
--
Gitblit v1.9.1