From b1ef4ee192f440ea578f991405028f12a20c1edc Mon Sep 17 00:00:00 2001 From: ziin Date: Mon, 23 Mar 2026 13:19:59 +0800 Subject: [PATCH] =?UTF-8?q?feat(config):=20=E6=94=AF=E6=8C=81=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E4=B8=AD=E5=BF=83=E5=8A=A8=E6=80=81=E8=B7=B3=E8=BF=87?= =?UTF-8?q?=E6=8C=87=E5=AE=9A=E7=94=A8=E6=88=B7=E7=AD=BE=E5=90=8D=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../keyborad/Interceptor/SignInterceptor.java | 26 ++++++++++++++++++- .../com/yolo/keyborad/config/AppConfig.java | 8 ++++++ .../keyborad/config/SaTokenConfigure.java | 7 +++-- 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/yolo/keyborad/Interceptor/SignInterceptor.java b/src/main/java/com/yolo/keyborad/Interceptor/SignInterceptor.java index c17e536..33a6067 100644 --- a/src/main/java/com/yolo/keyborad/Interceptor/SignInterceptor.java +++ b/src/main/java/com/yolo/keyborad/Interceptor/SignInterceptor.java @@ -1,7 +1,10 @@ package com.yolo.keyborad.interceptor; +import cn.dev33.satoken.stp.StpUtil; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; +import com.yolo.keyborad.config.AppConfig; +import com.yolo.keyborad.config.NacosAppConfigCenter; import com.yolo.keyborad.utils.SignUtils; import jakarta.servlet.DispatcherType; import jakarta.servlet.http.HttpServletRequest; @@ -25,6 +28,7 @@ public class SignInterceptor implements HandlerInterceptor { private final ObjectMapper signValueObjectMapper = new ObjectMapper() .configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true); private final StringRedisTemplate redisTemplate; + private final NacosAppConfigCenter.DynamicAppConfig cfgHolder; // 允许时间误差 20秒 private static final long ALLOW_TIME_DIFF_SECONDS = 200; @@ -32,9 +36,11 @@ public class SignInterceptor implements HandlerInterceptor { private static final long NONCE_EXPIRE_SECONDS = 300; public SignInterceptor(Map appSecretMap, - StringRedisTemplate redisTemplate) { + StringRedisTemplate redisTemplate, + NacosAppConfigCenter.DynamicAppConfig cfgHolder) { this.appSecretMap = appSecretMap; this.redisTemplate = redisTemplate; + this.cfgHolder = cfgHolder; } @Override @@ -43,6 +49,9 @@ public class SignInterceptor implements HandlerInterceptor { if (request.getDispatcherType() != DispatcherType.REQUEST) { return true; } + if (shouldSkipSignValidation()) { + return true; + } String appId = request.getHeader("X-App-Id"); String timestamp = request.getHeader("X-Timestamp"); @@ -121,6 +130,21 @@ public class SignInterceptor implements HandlerInterceptor { return true; } + private boolean shouldSkipSignValidation() { + AppConfig appConfig = cfgHolder.getRef().get(); + if (appConfig == null || appConfig.getSkipUser() == null) { + return false; + } + List skipList = appConfig.getSkipUser().getSkipList(); + if (skipList == null || skipList.isEmpty()) { + return false; + } + long userId = StpUtil.getLoginIdAsLong(); + return skipList.stream() + .filter(Objects::nonNull) + .anyMatch(skipUserId -> skipUserId.longValue() == userId); + } + private String stringifyForSign(Object value) { if (value == null) { return null; diff --git a/src/main/java/com/yolo/keyborad/config/AppConfig.java b/src/main/java/com/yolo/keyborad/config/AppConfig.java index e44024b..6dd8bec 100644 --- a/src/main/java/com/yolo/keyborad/config/AppConfig.java +++ b/src/main/java/com/yolo/keyborad/config/AppConfig.java @@ -3,6 +3,7 @@ package com.yolo.keyborad.config; import lombok.Data; import java.math.BigDecimal; +import java.util.List; /* * @author: ziin @@ -21,6 +22,8 @@ public class AppConfig { private customerMailConfig customerMailConfig = new customerMailConfig(); + private skipUser skipUser = new skipUser(); + @Data public static class UserRegisterProperties { @@ -41,6 +44,11 @@ public class AppConfig { private Integer vectorSearchLimit = 1; } + @Data + public static class skipUser{ + private List skipList = null; + } + @Data public static class LLmConfig { //LLM系统提示语 diff --git a/src/main/java/com/yolo/keyborad/config/SaTokenConfigure.java b/src/main/java/com/yolo/keyborad/config/SaTokenConfigure.java index 3ab12ec..6e5d797 100644 --- a/src/main/java/com/yolo/keyborad/config/SaTokenConfigure.java +++ b/src/main/java/com/yolo/keyborad/config/SaTokenConfigure.java @@ -22,9 +22,12 @@ import java.util.HashMap; public class SaTokenConfigure implements WebMvcConfigurer { private final StringRedisTemplate redisTemplate; + private final NacosAppConfigCenter.DynamicAppConfig cfgHolder; - public SaTokenConfigure(StringRedisTemplate redisTemplate) { + public SaTokenConfigure(StringRedisTemplate redisTemplate, + NacosAppConfigCenter.DynamicAppConfig cfgHolder) { this.redisTemplate = redisTemplate; + this.cfgHolder = cfgHolder; } HashMap appSecretMap = new HashMap<>(); @@ -53,7 +56,7 @@ public class SaTokenConfigure implements WebMvcConfigurer { .addPathPatterns("/**") .excludePathPatterns(getExcludePaths()); appSecretMap.put(appId, appSecret); - registry.addInterceptor(new SignInterceptor(appSecretMap,redisTemplate)) + registry.addInterceptor(new SignInterceptor(appSecretMap, redisTemplate, cfgHolder)) .addPathPatterns("/**") // 需要签名校验的接口 .excludePathPatterns(getExcludePaths()); // 不需要校验的接口; }