Browse Source

update 优化 防重 与 限流 功能支持国际化消息返回

疯狂的狮子Li 3 years ago
parent
commit
2ff36d81a1

+ 2 - 0
ruoyi-admin/src/main/resources/i18n/messages.properties

@@ -36,3 +36,5 @@ no.update.permission=您没有修改数据的权限,请联系管理员添加
 no.delete.permission=您没有删除数据的权限,请联系管理员添加权限 [{0}]
 no.export.permission=您没有导出数据的权限,请联系管理员添加权限 [{0}]
 no.view.permission=您没有查看数据的权限,请联系管理员添加权限 [{0}]
+repeat.submit.message=不允许重复提交,请稍候再试
+rate.limiter.message="访问过于频繁,请稍候再试"

+ 2 - 0
ruoyi-admin/src/main/resources/i18n/messages_en_US.properties

@@ -36,3 +36,5 @@ no.update.permission=You do not have permission to modify data,please contact
 no.delete.permission=You do not have permission to delete data,please contact your administrator to add permissions [{0}]
 no.export.permission=You do not have permission to export data,please contact your administrator to add permissions [{0}]
 no.view.permission=You do not have permission to view data,please contact your administrator to add permissions [{0}]
+repeat.submit.message=Repeat submit is not allowed, please try again later
+rate.limiter.message=Visit too frequently, please try again later

+ 2 - 0
ruoyi-admin/src/main/resources/i18n/messages_zh_CN.properties

@@ -36,3 +36,5 @@ no.update.permission=您没有修改数据的权限,请联系管理员添加
 no.delete.permission=您没有删除数据的权限,请联系管理员添加权限 [{0}]
 no.export.permission=您没有导出数据的权限,请联系管理员添加权限 [{0}]
 no.view.permission=您没有查看数据的权限,请联系管理员添加权限 [{0}]
+repeat.submit.message=不允许重复提交,请稍候再试
+rate.limiter.message="访问过于频繁,请稍候再试"

+ 2 - 2
ruoyi-common/src/main/java/com/ruoyi/common/annotation/RepeatSubmit.java

@@ -22,8 +22,8 @@ public @interface RepeatSubmit {
     TimeUnit timeUnit() default TimeUnit.MILLISECONDS;
 
     /**
-     * 提示消息
+     * 提示消息 支持国际化 格式为 {code}
      */
-    String message() default "不允许重复提交,请稍候再试";
+    String message() default "{repeat.submit.message}";
 
 }

+ 1 - 1
ruoyi-demo/src/main/java/com/ruoyi/demo/controller/TestDemoController.java

@@ -117,7 +117,7 @@ public class TestDemoController extends BaseController {
     @ApiOperation("新增测试单表")
     @SaCheckPermission("demo:demo:add")
     @Log(title = "测试单表", businessType = BusinessType.INSERT)
-    @RepeatSubmit(interval = 2, timeUnit = TimeUnit.SECONDS, message = "不允许重复提交")
+    @RepeatSubmit(interval = 2, timeUnit = TimeUnit.SECONDS, message = "{repeat.submit.message}")
     @PostMapping()
     public R<Void> add(@RequestBody TestDemoBo bo) {
         // 使用校验工具对标 @Validated(AddGroup.class) 注解

+ 2 - 1
ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RateLimiterAspect.java

@@ -3,6 +3,7 @@ package com.ruoyi.framework.aspectj;
 import com.ruoyi.common.annotation.RateLimiter;
 import com.ruoyi.common.enums.LimitType;
 import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.MessageUtils;
 import com.ruoyi.common.utils.ServletUtils;
 import com.ruoyi.common.utils.redis.RedisUtils;
 import lombok.extern.slf4j.Slf4j;
@@ -37,7 +38,7 @@ public class RateLimiterAspect {
             }
             long number = RedisUtils.rateLimiter(combineKey, rateType, count, time);
             if (number == -1) {
-                throw new ServiceException("访问过于频繁,请稍候再试");
+                throw new ServiceException(MessageUtils.message("rate.limiter.message"));
             }
             log.info("限制令牌 => {}, 剩余令牌 => {}, 缓存key => '{}'", count, number, combineKey);
         } catch (ServiceException e) {

+ 6 - 1
ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/RepeatSubmitAspect.java

@@ -8,6 +8,7 @@ import com.ruoyi.common.constant.Constants;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.JsonUtils;
+import com.ruoyi.common.utils.MessageUtils;
 import com.ruoyi.common.utils.ServletUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.redis.RedisUtils;
@@ -71,7 +72,11 @@ public class RepeatSubmitAspect {
             RedisUtils.setCacheObject(cacheRepeatKey, "", interval, TimeUnit.MILLISECONDS);
             KEY_CACHE.set(cacheRepeatKey);
         } else {
-            throw new ServiceException(repeatSubmit.message());
+            String message = repeatSubmit.message();
+            if (StringUtils.startsWith(message, "{") && StringUtils.endsWith(message, "}")) {
+                message = MessageUtils.message(StringUtils.substring(message, 1, message.length() - 1));
+            }
+            throw new ServiceException(message);
         }
     }