From 69a3c374ca3afb770e3b9ffcbdda07ce362cbf58 Mon Sep 17 00:00:00 2001
From: 1 <1@123>
Date: 星期五, 09 一月 2026 19:59:29 +0800
Subject: [PATCH] #
---
rsf-open-api/src/main/java/com/vincent/rsf/openApi/security/utils/TokenUtils.java | 161 +++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 161 insertions(+), 0 deletions(-)
diff --git a/rsf-open-api/src/main/java/com/vincent/rsf/openApi/security/utils/TokenUtils.java b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/security/utils/TokenUtils.java
new file mode 100644
index 0000000..cbadad0
--- /dev/null
+++ b/rsf-open-api/src/main/java/com/vincent/rsf/openApi/security/utils/TokenUtils.java
@@ -0,0 +1,161 @@
+package com.vincent.rsf.openApi.security.utils;
+
+import com.vincent.rsf.openApi.entity.app.App;
+import com.vincent.rsf.openApi.entity.constant.Constants;
+import com.vincent.rsf.openApi.service.AppService;
+import io.jsonwebtoken.*;
+import io.jsonwebtoken.security.Keys;
+import org.apache.tika.utils.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.annotation.Resource;
+import javax.crypto.SecretKey;
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * JWT Token宸ュ叿绫�
+ * 鐢ㄤ簬鐢熸垚鍜岄獙璇丣WT Token
+ */
+public class TokenUtils {
+ private static final Logger log = LoggerFactory.getLogger(TokenUtils.class);
+
+ // 浣跨敤涓�涓畨鍏ㄧ殑瀵嗛挜锛屽疄闄呭簲鐢ㄤ腑搴旇浠庨厤缃枃浠惰鍙�
+ private static final SecretKey SECRET_KEY = Keys.secretKeyFor(SignatureAlgorithm.HS256);
+
+ // Token杩囨湡鏃堕棿锛岄粯璁�1灏忔椂
+ private static final long TOKEN_EXPIRATION = 60 * 60 * 1000L; // 24灏忔椂
+
+ @Resource
+ private AppService appService;
+
+ /**
+ * 鐢熸垚JWT Token
+ *
+ * @param claims Token涓寘鍚殑澹版槑淇℃伅
+ * @return 鐢熸垚鐨凾oken瀛楃涓�
+ */
+ public static String generateToken(Map<String, Object> claims) {
+ long now = System.currentTimeMillis();
+ Date expiration = new Date(now + TOKEN_EXPIRATION);
+
+ return Jwts.builder()
+ .setClaims(claims)
+ .setExpiration(expiration)
+ .signWith(SECRET_KEY, SignatureAlgorithm.HS256)
+ .compact();
+ }
+
+ /**
+ * 鐢熸垚甯ppId鐨凾oken
+ *
+ * @param appId 搴旂敤ID
+ * @param appSecret 搴旂敤绉橀挜
+ * @return 鐢熸垚鐨凾oken瀛楃涓�
+ */
+ public static String generateToken(String appId, String appSecret) {
+ Map<String, Object> claims = Map.of(
+ "appId", appId,
+ "appSecret", appSecret,
+ "created", System.currentTimeMillis()
+ );
+ return generateToken(claims);
+ }
+
+ /**
+ * 瑙f瀽Token鑾峰彇澹版槑淇℃伅
+ *
+ * @param token Token瀛楃涓�
+ * @return 澹版槑淇℃伅
+ */
+ public static Claims parseToken(String token) {
+ try {
+ return Jwts.parserBuilder()
+ .setSigningKey(SECRET_KEY)
+ .build()
+ .parseClaimsJws(token)
+ .getBody();
+ } catch (JwtException e) {
+ log.error("瑙f瀽Token澶辫触: {}", e.getMessage());
+ return null;
+ }
+ }
+
+ /**
+ * 楠岃瘉Token鏃堕棿鏄惁鏈夋晥
+ *
+ * @param token Token瀛楃涓�
+ * @return 鏃堕棿鏄惁鏈夋晥
+ */
+ public static boolean validateTokenTime(String token) {
+ try {
+ Claims claims = parseToken(token);
+ if (claims == null) {
+ return false;
+ }
+
+ // 妫�鏌oken鏄惁杩囨湡
+ Date expiration = claims.getExpiration();
+ return expiration != null && expiration.after(new Date());
+ } catch (JwtException e) {
+ log.error("楠岃瘉Token澶辫触: {}", e.getMessage());
+ return false;
+ }
+ }
+
+ /**
+ * 浠嶵oken涓幏鍙朅ppId
+ *
+ * @param token Token瀛楃涓�
+ * @return AppId
+ */
+ public static String getAppIdFromToken(String token) {
+ Claims claims = parseToken(token);
+ if (claims != null) {
+ return (String) claims.get("appId");
+ }
+ return null;
+ }
+
+ /**
+ * 浠嶵oken涓幏鍙朼ppSecret
+ *
+ * @param token Token瀛楃涓�
+ * @return appSecret
+ */
+ public static String getSecretFromToken(String token) {
+ Claims claims = parseToken(token);
+ if (claims != null) {
+ return (String) claims.get("appSecret");
+ }
+ return null;
+ }
+
+// /**
+// * 浠嶵oken涓幏鍙朥serId
+// *
+// * @param token Token瀛楃涓�
+// * @return UserId
+// */
+// public static String getUserIdFromToken(String token) {
+// Claims claims = parseToken(token);
+// if (claims != null) {
+// return (String) claims.get("userId");
+// }
+// return null;
+// }
+
+ /**
+ * 浠嶢uthorization澶翠腑鎻愬彇Token
+ *
+ * @param authHeader Authorization澶村唴瀹�
+ * @return Token瀛楃涓诧紙涓嶅寘鍚獴earer鍓嶇紑锛�
+ */
+ public static String extractTokenFromHeader(String authHeader) {
+ if (authHeader != null && authHeader.startsWith(Constants.TOKEN_PREFIX)) {
+ return authHeader.substring(Constants.TOKEN_PREFIX.length()).trim();
+ }
+ return null;
+ }
+}
\ No newline at end of file
--
Gitblit v1.9.1