update 优化 防重 与 限流 功能支持国际化消息返回
| | |
| | | no.delete.permission=您没有删除数据的权限,请联系管理员添加权限 [{0}] |
| | | no.export.permission=您没有导出数据的权限,请联系管理员添加权限 [{0}] |
| | | no.view.permission=您没有查看数据的权限,请联系管理员添加权限 [{0}] |
| | | repeat.submit.message=不允许重复提交,请稍候再试 |
| | | rate.limiter.message="访问过于频繁,请稍候再试" |
| | |
| | | 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 |
| | |
| | | no.delete.permission=您没有删除数据的权限,请联系管理员添加权限 [{0}] |
| | | no.export.permission=您没有导出数据的权限,请联系管理员添加权限 [{0}] |
| | | no.view.permission=您没有查看数据的权限,请联系管理员添加权限 [{0}] |
| | | repeat.submit.message=不允许重复提交,请稍候再试 |
| | | rate.limiter.message="访问过于频繁,请稍候再试" |
| | |
| | | TimeUnit timeUnit() default TimeUnit.MILLISECONDS; |
| | | |
| | | /** |
| | | * 提示消息 |
| | | * 提示消息 支持国际化 格式为 {code} |
| | | */ |
| | | String message() default "不允许重复提交,请稍候再试"; |
| | | String message() default "{repeat.submit.message}"; |
| | | |
| | | } |
| | |
| | | @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) 注解 |
| | |
| | | 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; |
| | |
| | | } |
| | | 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) { |
| | |
| | | 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; |
| | |
| | | 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); |
| | | } |
| | | } |
| | | |