From 80c070093498abb8dff5529d177e1e2519577bf0 Mon Sep 17 00:00:00 2001 From: Charles7c Date: Sat, 4 Jan 2025 19:42:03 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E8=A7=A3=E5=86=B3=20Sonar=20?= =?UTF-8?q?=E9=97=AE=E9=A2=98=EF=BC=8C=E6=9B=BF=E6=8D=A2=E9=83=A8=E5=88=86?= =?UTF-8?q?=E8=BF=87=E6=9C=9F=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apidoc/handler/OpenApiHandler.java | 15 ++++++------- .../cache/redisson/util/RedisUtils.java | 20 +++++++++++++++-- .../threadpool/AsyncAutoConfiguration.java | 1 - .../data/mf/util/QueryWrapperHelper.java | 9 ++++---- .../security/crypto/enums/Algorithm.java | 4 ++-- .../limiter/annotation/RateLimiter.java | 4 ++-- .../limiter/core/RateLimiterAspect.java | 22 +++++++++---------- .../starter/security/mask/enums/MaskType.java | 18 +++++++-------- .../web/autoconfigure/xss/XssFilter.java | 6 ++--- .../xss/XssServletRequestWrapper.java | 4 ++-- 10 files changed, 57 insertions(+), 46 deletions(-) diff --git a/continew-starter-api-doc/src/main/java/top/continew/starter/apidoc/handler/OpenApiHandler.java b/continew-starter-api-doc/src/main/java/top/continew/starter/apidoc/handler/OpenApiHandler.java index c782fb1d..217e2410 100644 --- a/continew-starter-api-doc/src/main/java/top/continew/starter/apidoc/handler/OpenApiHandler.java +++ b/continew-starter-api-doc/src/main/java/top/continew/starter/apidoc/handler/OpenApiHandler.java @@ -36,7 +36,6 @@ import org.springdoc.core.service.SecurityService; import org.springdoc.core.utils.PropertyResolverUtils; import org.springframework.context.ApplicationContext; import org.springframework.core.annotation.AnnotatedElementUtils; -import org.springframework.util.CollectionUtils; import org.springframework.web.method.HandlerMethod; import java.io.StringReader; @@ -152,7 +151,7 @@ public class OpenApiHandler extends OpenAPIService { if (this.openAPI.getPaths() == null) { this.openAPI.setPaths(new Paths()); } - if (!CollectionUtils.isEmpty(this.openAPI.getServers())) { + if (CollUtil.isNotEmpty(this.openAPI.getServers())) { this.isServersPresent = true; } } @@ -176,7 +175,7 @@ public class OpenApiHandler extends OpenAPIService { buildTagsFromMethod(handlerMethod.getMethod(), tags, tagsStr, locale); buildTagsFromClass(handlerMethod.getBeanType(), tags, tagsStr, locale); - if (!CollectionUtils.isEmpty(tagsStr)) { + if (CollUtil.isNotEmpty(tagsStr)) { tagsStr = tagsStr.stream() .map(str -> propertyResolverUtils.resolve(str, locale)) .collect(Collectors.toSet()); @@ -190,8 +189,8 @@ public class OpenApiHandler extends OpenAPIService { } } - if (!CollectionUtils.isEmpty(tagsStr)) { - if (CollectionUtils.isEmpty(operation.getTags())) { + if (CollUtil.isNotEmpty(tagsStr)) { + if (CollUtil.isEmpty(operation.getTags())) { operation.setTags(new ArrayList<>(tagsStr)); } else { Set operationTagsSet = new HashSet<>(operation.getTags()); @@ -225,10 +224,10 @@ public class OpenApiHandler extends OpenAPIService { } } - if (!CollectionUtils.isEmpty(tags)) { + if (CollUtil.isNotEmpty(tags)) { // Existing tags List openApiTags = openAPI.getTags(); - if (!CollectionUtils.isEmpty(openApiTags)) { + if (CollUtil.isNotEmpty(openApiTags)) { tags.addAll(openApiTags); } openAPI.setTags(new ArrayList<>(tags)); @@ -256,7 +255,7 @@ public class OpenApiHandler extends OpenAPIService { .collect(Collectors.toSet()); methodTags.addAll(AnnotatedElementUtils .findAllMergedAnnotations(method, io.swagger.v3.oas.annotations.tags.Tag.class)); - if (!CollectionUtils.isEmpty(methodTags)) { + if (CollUtil.isNotEmpty(methodTags)) { tagsStr.addAll(toSet(methodTags, tag -> propertyResolverUtils.resolve(tag.name(), locale))); List allTags = new ArrayList<>(methodTags); addTags(allTags, tags, locale); diff --git a/continew-starter-cache/continew-starter-cache-redisson/src/main/java/top/continew/starter/cache/redisson/util/RedisUtils.java b/continew-starter-cache/continew-starter-cache-redisson/src/main/java/top/continew/starter/cache/redisson/util/RedisUtils.java index c7b04510..a9458bf3 100644 --- a/continew-starter-cache/continew-starter-cache-redisson/src/main/java/top/continew/starter/cache/redisson/util/RedisUtils.java +++ b/continew-starter-cache/continew-starter-cache-redisson/src/main/java/top/continew/starter/cache/redisson/util/RedisUtils.java @@ -19,6 +19,7 @@ package top.continew.starter.cache.redisson.util; import cn.hutool.core.util.ArrayUtil; import cn.hutool.extra.spring.SpringUtil; import org.redisson.api.*; +import org.redisson.api.options.KeysScanOptions; import top.continew.starter.core.constant.StringConstants; import java.time.Duration; @@ -191,7 +192,9 @@ public class RedisUtils { * @return 缓存列表 */ public static Collection keys(String pattern) { - return CLIENT.getKeys().getKeysStreamByPattern(pattern).toList(); + KeysScanOptions options = KeysScanOptions.defaults(); + options.pattern(pattern); + return CLIENT.getKeys().getKeysStream(options).toList(); } /** @@ -365,8 +368,21 @@ public class RedisUtils { * @return true:成功;false:失败 */ public static boolean rateLimit(String key, RateType rateType, int rate, int rateInterval) { + return rateLimit(key, rateType, rate, Duration.ofSeconds(rateInterval)); + } + + /** + * 限流 + * + * @param key 键 + * @param rateType 限流类型(OVERALL:全局限流;PER_CLIENT:单机限流) + * @param rate 速率(指定时间间隔产生的令牌数) + * @param rateInterval 速率间隔(时间间隔) + * @return true:成功;false:失败 + */ + public static boolean rateLimit(String key, RateType rateType, int rate, Duration rateInterval) { RRateLimiter rateLimiter = CLIENT.getRateLimiter(key); - rateLimiter.trySetRate(rateType, rate, rateInterval, RateIntervalUnit.SECONDS); + rateLimiter.trySetRate(rateType, rate, rateInterval); return rateLimiter.tryAcquire(1); } diff --git a/continew-starter-core/src/main/java/top/continew/starter/core/autoconfigure/threadpool/AsyncAutoConfiguration.java b/continew-starter-core/src/main/java/top/continew/starter/core/autoconfigure/threadpool/AsyncAutoConfiguration.java index 6265eeac..a645a9ba 100644 --- a/continew-starter-core/src/main/java/top/continew/starter/core/autoconfigure/threadpool/AsyncAutoConfiguration.java +++ b/continew-starter-core/src/main/java/top/continew/starter/core/autoconfigure/threadpool/AsyncAutoConfiguration.java @@ -67,7 +67,6 @@ public class AsyncAutoConfiguration implements AsyncConfigurer { @Override public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { return (throwable, method, objects) -> { - throwable.printStackTrace(); StringBuilder sb = new StringBuilder(); sb.append("Exception message: ") .append(throwable.getMessage()) diff --git a/continew-starter-data/continew-starter-data-mf/src/main/java/top/continew/starter/data/mf/util/QueryWrapperHelper.java b/continew-starter-data/continew-starter-data-mf/src/main/java/top/continew/starter/data/mf/util/QueryWrapperHelper.java index a47d314c..f76b219f 100644 --- a/continew-starter-data/continew-starter-data-mf/src/main/java/top/continew/starter/data/mf/util/QueryWrapperHelper.java +++ b/continew-starter-data/continew-starter-data-mf/src/main/java/top/continew/starter/data/mf/util/QueryWrapperHelper.java @@ -183,12 +183,11 @@ public class QueryWrapperHelper { * @param queryType 查询类型 * @param columnName 列名 * @param fieldValue 字段值 - * @param 查询数据类型 */ - private static void parse(QueryType queryType, - String columnName, - Object fieldValue, - List> consumers) { + private static void parse(QueryType queryType, + String columnName, + Object fieldValue, + List> consumers) { switch (queryType) { case EQ -> consumers.add(q -> q.eq(columnName, fieldValue)); case NE -> consumers.add(q -> q.ne(columnName, fieldValue)); diff --git a/continew-starter-security/continew-starter-security-crypto/src/main/java/top/continew/starter/security/crypto/enums/Algorithm.java b/continew-starter-security/continew-starter-security-crypto/src/main/java/top/continew/starter/security/crypto/enums/Algorithm.java index 549be9fa..ab20db04 100644 --- a/continew-starter-security/continew-starter-security-crypto/src/main/java/top/continew/starter/security/crypto/enums/Algorithm.java +++ b/continew-starter-security/continew-starter-security-crypto/src/main/java/top/continew/starter/security/crypto/enums/Algorithm.java @@ -37,9 +37,9 @@ public enum Algorithm { DES(DesEncryptor.class), /** - * PBEWithMD5AndDES + * PBE With MD5 And DES */ - PBEWithMD5AndDES(PbeWithMd5AndDesEncryptor.class), + PBE_WITH_MD5_AND_DES(PbeWithMd5AndDesEncryptor.class), /** * RSA diff --git a/continew-starter-security/continew-starter-security-limiter/src/main/java/top/continew/starter/security/limiter/annotation/RateLimiter.java b/continew-starter-security/continew-starter-security-limiter/src/main/java/top/continew/starter/security/limiter/annotation/RateLimiter.java index 03ad6efd..9cfd9bab 100644 --- a/continew-starter-security/continew-starter-security-limiter/src/main/java/top/continew/starter/security/limiter/annotation/RateLimiter.java +++ b/continew-starter-security/continew-starter-security-limiter/src/main/java/top/continew/starter/security/limiter/annotation/RateLimiter.java @@ -16,10 +16,10 @@ package top.continew.starter.security.limiter.annotation; -import org.redisson.api.RateIntervalUnit; import top.continew.starter.security.limiter.enums.LimitType; import java.lang.annotation.*; +import java.util.concurrent.TimeUnit; /** * 限流注解 @@ -60,7 +60,7 @@ public @interface RateLimiter { /** * 速率间隔时间单位(默认:毫秒) */ - RateIntervalUnit unit() default RateIntervalUnit.MILLISECONDS; + TimeUnit unit() default TimeUnit.MILLISECONDS; /** * 提示信息 diff --git a/continew-starter-security/continew-starter-security-limiter/src/main/java/top/continew/starter/security/limiter/core/RateLimiterAspect.java b/continew-starter-security/continew-starter-security-limiter/src/main/java/top/continew/starter/security/limiter/core/RateLimiterAspect.java index 4ad5f035..8642d1e9 100644 --- a/continew-starter-security/continew-starter-security-limiter/src/main/java/top/continew/starter/security/limiter/core/RateLimiterAspect.java +++ b/continew-starter-security/continew-starter-security-limiter/src/main/java/top/continew/starter/security/limiter/core/RateLimiterAspect.java @@ -39,6 +39,7 @@ import top.continew.starter.security.limiter.exception.RateLimiterException; import top.continew.starter.web.util.SpringWebUtils; import java.lang.reflect.Method; +import java.time.Duration; import java.util.Objects; import java.util.concurrent.ConcurrentHashMap; @@ -129,12 +130,11 @@ public class RateLimiterAspect { // 限流器配置 RateType rateType = rateLimiter.type() == LimitType.CLUSTER ? RateType.PER_CLIENT : RateType.OVERALL; int rate = rateLimiter.rate(); - int rateInterval = rateLimiter.interval(); - RateIntervalUnit rateIntervalUnit = rateLimiter.unit(); + Duration rateInterval = Duration.ofMillis(rateLimiter.unit().toMillis(rateLimiter.interval())); // 判断是否需要更新限流器 - if (this.isConfigurationUpdateNeeded(rRateLimiter, rateType, rate, rateInterval, rateIntervalUnit)) { + if (this.isConfigurationUpdateNeeded(rRateLimiter, rateType, rate, rateInterval)) { // 更新限流器 - rRateLimiter.setRate(rateType, rate, rateInterval, rateIntervalUnit); + rRateLimiter.setRate(rateType, rate, rateInterval); } // 尝试获取令牌 return !rRateLimiter.tryAcquire(); @@ -181,20 +181,18 @@ public class RateLimiterAspect { /** * 判断是否需要更新限流器配置 * - * @param rRateLimiter 限流器 - * @param rateType 限流类型(OVERALL:全局限流;PER_CLIENT:单机限流) - * @param rate 速率(指定时间间隔产生的令牌数) - * @param rateInterval 速率间隔 - * @param rateIntervalUnit 时间单位 + * @param rRateLimiter 限流器 + * @param rateType 限流类型(OVERALL:全局限流;PER_CLIENT:单机限流) + * @param rate 速率(指定时间间隔产生的令牌数) + * @param rateInterval 速率间隔 * @return 是否需要更新配置 */ private boolean isConfigurationUpdateNeeded(RRateLimiter rRateLimiter, RateType rateType, long rate, - long rateInterval, - RateIntervalUnit rateIntervalUnit) { + Duration rateInterval) { RateLimiterConfig config = rRateLimiter.getConfig(); return !Objects.equals(config.getRateType(), rateType) || !Objects.equals(config.getRate(), rate) || !Objects - .equals(config.getRateInterval(), rateIntervalUnit.toMillis(rateInterval)); + .equals(config.getRateInterval(), rateInterval.toMillis()); } } diff --git a/continew-starter-security/continew-starter-security-mask/src/main/java/top/continew/starter/security/mask/enums/MaskType.java b/continew-starter-security/continew-starter-security-mask/src/main/java/top/continew/starter/security/mask/enums/MaskType.java index 56874d15..c1d66339 100644 --- a/continew-starter-security/continew-starter-security-mask/src/main/java/top/continew/starter/security/mask/enums/MaskType.java +++ b/continew-starter-security/continew-starter-security-mask/src/main/java/top/continew/starter/security/mask/enums/MaskType.java @@ -34,7 +34,7 @@ public enum MaskType implements IMaskStrategy { CUSTOM { @Override public String mask(String str, char character, int left, int right) { - return CharSequenceUtil.replace(str, left, str.length() - right, character); + return CharSequenceUtil.replaceByCodePoint(str, left, str.length() - right, character); } }, @@ -45,7 +45,7 @@ public enum MaskType implements IMaskStrategy { MOBILE_PHONE { @Override public String mask(String str, char character, int left, int right) { - return CharSequenceUtil.replace(str, 3, str.length() - 4, character); + return CharSequenceUtil.replaceByCodePoint(str, 3, str.length() - 4, character); } }, @@ -58,7 +58,7 @@ public enum MaskType implements IMaskStrategy { FIXED_PHONE { @Override public String mask(String str, char character, int left, int right) { - return CharSequenceUtil.replace(str, 4, str.length() - 2, character); + return CharSequenceUtil.replaceByCodePoint(str, 4, str.length() - 2, character); } }, @@ -76,7 +76,7 @@ public enum MaskType implements IMaskStrategy { if (index <= 1) { return str; } - return CharSequenceUtil.replace(str, 1, index, character); + return CharSequenceUtil.replaceByCodePoint(str, 1, index, character); } }, @@ -89,7 +89,7 @@ public enum MaskType implements IMaskStrategy { ID_CARD { @Override public String mask(String str, char character, int left, int right) { - return CharSequenceUtil.replace(str, 1, str.length() - 2, character); + return CharSequenceUtil.replaceByCodePoint(str, 1, str.length() - 2, character); } }, @@ -140,11 +140,11 @@ public enum MaskType implements IMaskStrategy { // 普通车牌 int length = str.length(); if (length == 7) { - return CharSequenceUtil.replace(str, 3, 6, character); + return CharSequenceUtil.replaceByCodePoint(str, 3, 6, character); } // 新能源车牌 if (length == 8) { - return CharSequenceUtil.replace(str, 3, 7, character); + return CharSequenceUtil.replaceByCodePoint(str, 3, 7, character); } return str; } @@ -159,7 +159,7 @@ public enum MaskType implements IMaskStrategy { CHINESE_NAME { @Override public String mask(String str, char character, int left, int right) { - return CharSequenceUtil.replace(str, 1, str.length(), character); + return CharSequenceUtil.replaceByCodePoint(str, 1, str.length(), character); } }, @@ -186,7 +186,7 @@ public enum MaskType implements IMaskStrategy { @Override public String mask(String str, char character, int left, int right) { int length = str.length(); - return CharSequenceUtil.replace(str, length - 8, length, character); + return CharSequenceUtil.replaceByCodePoint(str, length - 8, length, character); } }, diff --git a/continew-starter-web/src/main/java/top/continew/starter/web/autoconfigure/xss/XssFilter.java b/continew-starter-web/src/main/java/top/continew/starter/web/autoconfigure/xss/XssFilter.java index c79fef45..e26317f6 100644 --- a/continew-starter-web/src/main/java/top/continew/starter/web/autoconfigure/xss/XssFilter.java +++ b/continew-starter-web/src/main/java/top/continew/starter/web/autoconfigure/xss/XssFilter.java @@ -16,7 +16,7 @@ package top.continew.starter.web.autoconfigure.xss; -import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.collection.CollUtil; import jakarta.servlet.*; import jakarta.servlet.http.HttpServletRequest; import org.slf4j.Logger; @@ -55,14 +55,14 @@ public class XssFilter implements Filter { if (servletRequest instanceof HttpServletRequest request && xssProperties.isEnabled()) { // 放行路由:忽略 XSS 过滤 List excludePatterns = xssProperties.getExcludePatterns(); - if (CollectionUtil.isNotEmpty(excludePatterns) && SpringWebUtils.isMatch(request + if (CollUtil.isNotEmpty(excludePatterns) && SpringWebUtils.isMatch(request .getServletPath(), excludePatterns)) { filterChain.doFilter(request, servletResponse); return; } // 拦截路由:执行 XSS 过滤 List includePatterns = xssProperties.getIncludePatterns(); - if (CollectionUtil.isNotEmpty(includePatterns)) { + if (CollUtil.isNotEmpty(includePatterns)) { if (SpringWebUtils.isMatch(request.getServletPath(), includePatterns)) { filterChain.doFilter(new XssServletRequestWrapper(request, xssProperties), servletResponse); } else { diff --git a/continew-starter-web/src/main/java/top/continew/starter/web/autoconfigure/xss/XssServletRequestWrapper.java b/continew-starter-web/src/main/java/top/continew/starter/web/autoconfigure/xss/XssServletRequestWrapper.java index a8b82cc0..0094ed44 100644 --- a/continew-starter-web/src/main/java/top/continew/starter/web/autoconfigure/xss/XssServletRequestWrapper.java +++ b/continew-starter-web/src/main/java/top/continew/starter/web/autoconfigure/xss/XssServletRequestWrapper.java @@ -16,7 +16,7 @@ package top.continew.starter.web.autoconfigure.xss; -import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.util.ArrayUtil; @@ -110,7 +110,7 @@ public class XssServletRequestWrapper extends HttpServletRequestWrapper { // 转义 if (XssMode.ESCAPE.equals(mode)) { List reStr = ReUtil.findAllGroup0(HtmlUtil.RE_HTML_MARK, content); - if (CollectionUtil.isEmpty(reStr)) { + if (CollUtil.isEmpty(reStr)) { return content; } for (String s : reStr) {