Jelajahi Sumber

代码优化

woody 1 tahun lalu
induk
melakukan
086cde2b8a
15 mengubah file dengan 41 tambahan dan 97 penghapusan
  1. 11 19
      framework-base/src/main/java/com/chelvc/framework/base/interceptor/DynamicLoggingInterceptor.java
  2. 2 6
      framework-database/src/main/java/com/chelvc/framework/database/interceptor/DynamicDatasourceInterceptor.java
  3. 1 3
      framework-feign/src/main/java/com/chelvc/framework/feign/interceptor/FeignHeaderInterceptor.java
  4. 2 7
      framework-location/src/main/java/com/chelvc/framework/location/support/JuheLocationHandler.java
  5. 2 7
      framework-location/src/main/java/com/chelvc/framework/location/support/TencentLocationHandler.java
  6. 5 8
      framework-oauth/src/main/java/com/chelvc/framework/oauth/context/OAuthContextHolder.java
  7. 1 1
      framework-oauth/src/main/java/com/chelvc/framework/oauth/token/RedisTokenValidator.java
  8. 0 13
      framework-oauth/src/main/java/com/chelvc/framework/oauth/token/TokenActiveValidator.java
  9. 0 3
      framework-oauth/src/main/resources/i18n/messages.properties
  10. 3 7
      framework-redis/src/main/java/com/chelvc/framework/redis/cache/RedisZSetCaching.java
  11. 11 11
      framework-redis/src/main/java/com/chelvc/framework/redis/context/RedisContextHolder.java
  12. 2 6
      framework-redis/src/main/java/com/chelvc/framework/redis/stream/MessageStreamListener.java
  13. 1 3
      framework-security/src/main/java/com/chelvc/framework/security/serializer/JacksonDesensitizeSerializer.java
  14. 0 1
      framework-security/src/main/resources/i18n/messages.properties
  15. 0 2
      framework-sms/src/main/resources/i18n/messages.properties

+ 11 - 19
framework-base/src/main/java/com/chelvc/framework/base/interceptor/DynamicLoggingInterceptor.java

@@ -1,12 +1,13 @@
 package com.chelvc.framework.base.interceptor;
 
+import java.util.Objects;
+
 import ch.qos.logback.classic.Level;
-import ch.qos.logback.classic.spi.ILoggingEvent;
-import ch.qos.logback.core.filter.Filter;
+import ch.qos.logback.classic.Logger;
+import ch.qos.logback.classic.turbo.TurboFilter;
 import ch.qos.logback.core.spi.FilterReply;
 import com.chelvc.framework.base.context.ApplicationContextHolder;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
+import org.slf4j.Marker;
 
 /**
  * 动态日志处理拦截器
@@ -14,24 +15,15 @@ import lombok.EqualsAndHashCode;
  * @author Woody
  * @date 2024/1/30
  */
-@Data
-@EqualsAndHashCode(callSuper = true)
-public class DynamicLoggingInterceptor extends Filter<ILoggingEvent> {
-    private Level level;
-
+public class DynamicLoggingInterceptor extends TurboFilter {
     @Override
-    public FilterReply decide(ILoggingEvent event) {
-        if (!this.isStarted()) {
-            return FilterReply.NEUTRAL;
-        }
-
-        Level level = this.level != null ? this.level :
-                ApplicationContextHolder.getSafeProperty("logging.level." + event.getLoggerName(), Level.class);
-        if (level == null) {
+    public FilterReply decide(Marker marker, Logger logger, Level level, String format, Object[] params, Throwable t) {
+        if (logger.getName().startsWith("ch.qos.logback.") || logger.getName().startsWith("org.springframework.")
+                || Objects.equals(logger.getName(), ApplicationContextHolder.class.getName())) {
             return FilterReply.NEUTRAL;
-        } else if (event.getLevel().isGreaterOrEqual(level)) {
+        } else if (ApplicationContextHolder.getSafeProperty("logging.level." + logger.getName(), Level.class) == level) {
             return FilterReply.ACCEPT;
         }
-        return FilterReply.DENY;
+        return FilterReply.NEUTRAL;
     }
 }

+ 2 - 6
framework-database/src/main/java/com/chelvc/framework/database/interceptor/DynamicDatasourceInterceptor.java

@@ -45,9 +45,7 @@ public class DynamicDatasourceInterceptor {
                 }
             });
         }
-        if (log.isDebugEnabled()) {
-            log.debug("Initialized datasource context: {}", this.datasourceContext);
-        }
+        log.debug("Initialized datasource context: {}", this.datasourceContext);
     }
 
     /**
@@ -95,9 +93,7 @@ public class DynamicDatasourceInterceptor {
     )
     public Object routing(ProceedingJoinPoint point) throws Throwable {
         String key = this.lookupDatasourceKey(point);
-        if (log.isDebugEnabled()) {
-            log.debug("Initializing datasource context for {}: {}", point.getSignature().toShortString(), key);
-        }
+        log.debug("Initializing datasource context for {}: {}", point.getSignature().toShortString(), key);
         DynamicDataSourceContextHolder.push(key);
         try {
             return point.proceed(point.getArgs());

+ 1 - 3
framework-feign/src/main/java/com/chelvc/framework/feign/interceptor/FeignHeaderInterceptor.java

@@ -39,8 +39,6 @@ public class FeignHeaderInterceptor implements RequestInterceptor {
             template.header(SessionContextHolder.HEADER_TIMESTAMP,
                     (String) ObjectUtils.ifNull(session.getTimestamp(), String::valueOf));
         }
-        if (log.isDebugEnabled()) {
-            log.debug("Feign request headers: {}", template.headers());
-        }
+        log.debug("Feign request headers: {}", template.headers());
     }
 }

+ 2 - 7
framework-location/src/main/java/com/chelvc/framework/location/support/JuheLocationHandler.java

@@ -41,10 +41,7 @@ public class JuheLocationHandler implements LocationHandler {
      */
     private Address execute(String url, String parameter) {
         url = String.format(url, parameter, this.key);
-        boolean debug = log.isDebugEnabled();
-        if (debug) {
-            log.debug("Juhe location request: {}", url);
-        }
+        log.debug("Juhe location request: {}", url);
         JuheLocationResponse response;
         try {
             response = this.restTemplate.getForObject(url, JuheLocationResponse.class);
@@ -52,9 +49,7 @@ public class JuheLocationHandler implements LocationHandler {
             log.warn("Juhe locate failed: {}", e.getMessage());
             return null;
         }
-        if (debug) {
-            log.debug("Juhe locate response: {}", response);
-        }
+        log.debug("Juhe locate response: {}", response);
         if (response == null || response.getStatus() == null || response.getStatus() != 0) {
             log.warn("Juhe locate failed: {}", response);
             return null;

+ 2 - 7
framework-location/src/main/java/com/chelvc/framework/location/support/TencentLocationHandler.java

@@ -48,11 +48,8 @@ public class TencentLocationHandler implements LocationHandler {
      * @return 地址信息
      */
     private Address execute(String url, String parameter) {
-        boolean debug = log.isDebugEnabled();
         url = String.format(url, parameter, this.key);
-        if (debug) {
-            log.debug("Tencent location request: {}", url);
-        }
+        log.debug("Tencent location request: {}", url);
         TencentLocationResponse response;
         try {
             response = this.restTemplate.getForObject(url, TencentLocationResponse.class);
@@ -60,9 +57,7 @@ public class TencentLocationHandler implements LocationHandler {
             log.warn("Tencent locate failed: {}", e.getMessage());
             return null;
         }
-        if (debug) {
-            log.debug("Tencent locate response: {}", response);
-        }
+        log.debug("Tencent locate response: {}", response);
         if (response == null || response.getStatus() == null || response.getStatus() != 0) {
             log.warn("Tencent locate failed: {}", response);
             return null;

+ 5 - 8
framework-oauth/src/main/java/com/chelvc/framework/oauth/context/OAuthContextHolder.java

@@ -3,6 +3,7 @@ package com.chelvc.framework.oauth.context;
 import java.text.ParseException;
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
 import javax.servlet.http.HttpServletRequest;
@@ -186,8 +187,7 @@ public final class OAuthContextHolder {
      * @return 应用范围
      */
     public static String getScope(Jwt jwt) {
-        List<String> scopes = jwt == null ? null : jwt.getClaimAsStringList(JWT_CLAIM_SCOPE);
-        return StringUtils.ifEmpty(ObjectUtils.isEmpty(scopes) ? null : scopes.get(0), (String) null);
+        return jwt == null ? null : StringUtils.ifEmpty(jwt.getClaimAsString(JWT_CLAIM_SCOPE), (String) null);
     }
 
     /**
@@ -197,10 +197,7 @@ public final class OAuthContextHolder {
      * @return 应用范围
      */
     public static String getScope(JWT jwt) {
-        return StringUtils.ifEmpty(getJwtClaim(jwt, claims -> {
-            String[] scopes = claims.getStringArrayClaim(JWT_CLAIM_SCOPE);
-            return ObjectUtils.isEmpty(scopes) ? null : scopes[0];
-        }), (String) null);
+        return StringUtils.ifEmpty(getJwtClaim(jwt, claims -> claims.getStringClaim(JWT_CLAIM_SCOPE)), (String) null);
     }
 
     /**
@@ -210,8 +207,8 @@ public final class OAuthContextHolder {
      * @return 应用范围
      */
     public static String getScope(OAuth2AccessToken token) {
-        Set<String> scopes = ObjectUtils.ifNull(token, OAuth2AccessToken::getScope);
-        return ObjectUtils.isEmpty(scopes) ? null : StringUtils.ifEmpty(scopes.iterator().next(), (String) null);
+        Map<String, Object> additions = ObjectUtils.ifNull(token, OAuth2AccessToken::getAdditionalInformation);
+        return additions == null ? null : StringUtils.ifEmpty(additions.get(JWT_CLAIM_SCOPE), String::valueOf);
     }
 
     /**

+ 1 - 1
framework-oauth/src/main/java/com/chelvc/framework/oauth/token/RedisTokenValidator.java

@@ -74,7 +74,7 @@ public class RedisTokenValidator implements OAuth2TokenValidator<Jwt> {
         } else if (!Objects.equals(scope, String.valueOf(OAuthContextHolder.getScope(jwt)))) {
             // 判断应用范围是否相同,如果不同则表示应用范围已被重置,需要刷新令牌
             String message = ApplicationContextHolder.getMessage(
-                    "Scope.Changed", ApplicationContextHolder.getMessage(scope)
+                    "Scope.Changed", new Object[]{ApplicationContextHolder.getMessage(scope)}
             );
             throw new OAuth2AuthenticationException(new OAuth2Error("SCOPE_CHANGED", message, null));
         }

+ 0 - 13
framework-oauth/src/main/java/com/chelvc/framework/oauth/token/TokenActiveValidator.java

@@ -1,13 +0,0 @@
-package com.chelvc.framework.oauth.token;
-
-import org.springframework.security.oauth2.core.OAuth2TokenValidator;
-import org.springframework.security.oauth2.jwt.Jwt;
-
-/**
- * 令牌有效性验证器接口
- *
- * @author Woody
- * @date 2024/1/30
- */
-public interface TokenActiveValidator extends OAuth2TokenValidator<Jwt> {
-}

+ 0 - 3
framework-oauth/src/main/resources/i18n/messages.properties

@@ -1,3 +0,0 @@
-Token.Expired=会话已失效,请重新登陆
-Token.Changed=您的账号已在其他设备登陆
-Scope.Changed=您的应用已切换到{0}

+ 3 - 7
framework-redis/src/main/java/com/chelvc/framework/redis/cache/RedisZSetCaching.java

@@ -405,7 +405,7 @@ public class RedisZSetCaching implements Caching {
             } else {
                 value = (V) this.template.opsForValue().get(key);
             }
-            if (value == null && log.isDebugEnabled()) {
+            if (value == null) {
                 log.debug("Redis cache missing: {}", key);
             }
         } catch (Throwable t) {
@@ -441,9 +441,7 @@ public class RedisZSetCaching implements Caching {
         }
 
         // 重新加载并更新缓存数据
-        if (log.isDebugEnabled()) {
-            log.debug("Redis list cache missing: {}, {}, {}, {}", naming, min, max, size);
-        }
+        log.debug("Redis list cache missing: {}, {}, {}, {}", naming, min, max, size);
         List<V> suppliers = supplier.apply(naming, initial);
         if (ObjectUtils.isEmpty(suppliers)) {
             return ObjectUtils.ifEmpty(values, Collections::emptyList);
@@ -480,9 +478,7 @@ public class RedisZSetCaching implements Caching {
         }
 
         // 重新加载并更新缓存数据
-        if (log.isDebugEnabled()) {
-            log.debug("Redis random cache missing: {}, {}, {}, {}", naming, min, max, size);
-        }
+        log.debug("Redis random cache missing: {}, {}, {}, {}", naming, min, max, size);
         List<V> suppliers = supplier.apply(naming, initial);
         if (ObjectUtils.isEmpty(suppliers)) {
             return ObjectUtils.ifEmpty(values, Collections::emptyList);

+ 11 - 11
framework-redis/src/main/java/com/chelvc/framework/redis/context/RedisContextHolder.java

@@ -228,9 +228,9 @@ public final class RedisContextHolder {
      * 批量设置带过期时间的hash值
      */
     private static final RedisScript<Boolean> HSET_WITH_DURATION_SCRIPT = new DefaultRedisScript<>(
-            "local values = {} for i = 2, #ARGV do table.insert(values, ARGV[i]) end " +
-                    "return redis.call('HSET', KEYS[1], unpack(values)) and redis.call('EXPIRE', KEYS[1], ARGV[1])",
-            Boolean.class
+            "local values = {} for i = 2, #KEYS do table.insert(values, KEYS[i]) " +
+                    "table.insert(values, ARGV[i]) end return redis.call('HSET', KEYS[1], unpack(values)) " +
+                    "and redis.call('EXPIRE', KEYS[1], ARGV[1])", Boolean.class
     );
 
     /**
@@ -1078,11 +1078,9 @@ public final class RedisContextHolder {
      * @param key      键名称
      * @param values   hash键/值对
      * @param duration 有效时间
-     * @param <K>      键类型
-     * @param <V>      值类型
      * @return true/false
      */
-    public static <K, V> boolean put(@NonNull String key, @NonNull Map<K, V> values, @NonNull Duration duration) {
+    public static boolean put(@NonNull String key, @NonNull Map<String, ?> values, @NonNull Duration duration) {
         return put(getRedisTemplate(), key, values, duration);
     }
 
@@ -1097,19 +1095,21 @@ public final class RedisContextHolder {
      * @param <V>      值类型
      * @return true/false
      */
-    public static <K, HK, HV> boolean put(@NonNull RedisTemplate<K, ?> template, @NonNull K key,
-                                          @NonNull Map<HK, HV> values, @NonNull Duration duration) {
+    public static <K, V> boolean put(@NonNull RedisTemplate<K, ?> template, @NonNull K key, @NonNull Map<K, V> values,
+                                     @NonNull Duration duration) {
         if (ObjectUtils.isEmpty(values)) {
             return false;
         }
+        List<K> keys = Lists.newArrayListWithCapacity(values.size() + 1);
+        keys.add(key);
         Object[] args = new Object[values.size() + 1];
         int i = 0;
         args[i++] = duration.getSeconds();
-        for (Map.Entry<?, ?> entry : values.entrySet()) {
-            args[i++] = entry.getKey();
+        for (Map.Entry<K, ?> entry : values.entrySet()) {
+            keys.add(entry.getKey());
             args[i++] = entry.getValue();
         }
-        return Boolean.TRUE.equals(template.execute(HSET_WITH_DURATION_SCRIPT, Collections.singletonList(key), args));
+        return Boolean.TRUE.equals(template.execute(HSET_WITH_DURATION_SCRIPT, keys, args));
     }
 
     /**

+ 2 - 6
framework-redis/src/main/java/com/chelvc/framework/redis/stream/MessageStreamListener.java

@@ -101,9 +101,7 @@ public class MessageStreamListener<T> implements StreamListener<String, MapRecor
      * @return true/false
      */
     private boolean processing(MapRecord<String, String, String> record) {
-        if (log.isDebugEnabled()) {
-            log.debug("Consume message: {}, {}", this.consumer, record);
-        }
+        log.debug("Consume message: {}, {}", this.consumer, record);
 
         // 消费消息
         try {
@@ -123,9 +121,7 @@ public class MessageStreamListener<T> implements StreamListener<String, MapRecor
      * @return true/false
      */
     private boolean delaying(MapRecord<String, String, String> record, long timestamp) {
-        if (log.isDebugEnabled()) {
-            log.debug("Delaying message: {}, {}", this.consumer, record);
-        }
+        log.debug("Delaying message: {}, {}", this.consumer, record);
         try {
             String message = RedisContextHolder.serialize(record);
             RedisContextHolder.getStringTemplate().opsForZSet().add(this.delayed, message, timestamp);

+ 1 - 3
framework-security/src/main/java/com/chelvc/framework/security/serializer/JacksonDesensitizeSerializer.java

@@ -35,9 +35,7 @@ public class JacksonDesensitizeSerializer extends StdSerializer<String> implemen
             generator.writeString(plaintext);
         } else {
             String ciphertext = this.mode.desensitize(plaintext);
-            if (log.isDebugEnabled()) {
-                log.debug("Data desensitize: {} -> {}", plaintext, ciphertext);
-            }
+            log.debug("Data desensitize: {} -> {}", plaintext, ciphertext);
             generator.writeString(ciphertext);
         }
     }

+ 0 - 1
framework-security/src/main/resources/i18n/messages.properties

@@ -1 +0,0 @@
-Time.Deviated=请校准系统时间

+ 0 - 2
framework-sms/src/main/resources/i18n/messages.properties

@@ -1,2 +0,0 @@
-SMS.Count.Limit=短信发送次数已达上限
-SMS.Frequency.Limit=短信发送过于频繁,请稍后再试