From dffd5bf02a7c89c9b86b328620eceb789a67ac35 Mon Sep 17 00:00:00 2001
From: 疯狂的狮子Li <15040126243@163.com>
Date: 星期一, 03 四月 2023 13:22:07 +0800
Subject: [PATCH] update 优化 限流注解 key 支持简单 spel 表达式
---
ruoyi-common/ruoyi-common-ratelimiter/src/main/java/org/dromara/common/ratelimiter/aspectj/RateLimiterAspect.java | 10 +++++++++-
ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/RedisRateLimiterController.java | 12 ++++++++++++
2 files changed, 21 insertions(+), 1 deletions(-)
diff --git a/ruoyi-common/ruoyi-common-ratelimiter/src/main/java/org/dromara/common/ratelimiter/aspectj/RateLimiterAspect.java b/ruoyi-common/ruoyi-common-ratelimiter/src/main/java/org/dromara/common/ratelimiter/aspectj/RateLimiterAspect.java
index 75b32f1..8f3a5ca 100644
--- a/ruoyi-common/ruoyi-common-ratelimiter/src/main/java/org/dromara/common/ratelimiter/aspectj/RateLimiterAspect.java
+++ b/ruoyi-common/ruoyi-common-ratelimiter/src/main/java/org/dromara/common/ratelimiter/aspectj/RateLimiterAspect.java
@@ -18,6 +18,7 @@
import org.springframework.core.DefaultParameterNameDiscoverer;
import org.springframework.core.ParameterNameDiscoverer;
import org.springframework.expression.EvaluationContext;
+import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionParser;
import org.springframework.expression.ParserContext;
import org.springframework.expression.common.TemplateParserContext;
@@ -100,7 +101,14 @@
}
// 瑙f瀽杩斿洖缁檏ey
try {
- key = parser.parseExpression(key, parserContext).getValue(context, String.class) + ":";
+ Expression expression;
+ if (StringUtils.startsWith(key, parserContext.getExpressionPrefix())
+ && StringUtils.endsWith(key, parserContext.getExpressionSuffix())) {
+ expression = parser.parseExpression(key, parserContext);
+ } else {
+ expression = parser.parseExpression(key);
+ }
+ key = expression.getValue(context, String.class) + ":";
} catch (Exception e) {
throw new ServiceException("闄愭祦key瑙f瀽寮傚父!璇疯仈绯荤鐞嗗憳!");
}
diff --git a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/RedisRateLimiterController.java b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/RedisRateLimiterController.java
index 429c007..f8adf7d 100644
--- a/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/RedisRateLimiterController.java
+++ b/ruoyi-modules/ruoyi-demo/src/main/java/org/dromara/demo/controller/RedisRateLimiterController.java
@@ -49,4 +49,16 @@
return R.ok("鎿嶄綔鎴愬姛", value);
}
+ /**
+ * 娴嬭瘯璇锋眰IP闄愭祦(key鍩轰簬鍙傛暟鑾峰彇)
+ * 鍚屼竴IP璇锋眰鍙楀奖鍝�
+ *
+ * 绠�鍗曞彉閲忚幏鍙� #鍙橀噺 澶嶆潅琛ㄨ揪寮� #{#鍙橀噺 != 1 ? 1 : 0}
+ */
+ @RateLimiter(count = 2, time = 10, limitType = LimitType.IP, key = "#value")
+ @GetMapping("/testObj")
+ public R<String> testObj(String value) {
+ return R.ok("鎿嶄綔鎴愬姛", value);
+ }
+
}
--
Gitblit v1.9.3