update 优化 限流注解 key 支持简单 spel 表达式

feature/model
疯狂的狮子Li 2 years ago
parent df38aad2b5
commit dffd5bf02a

@ -18,6 +18,7 @@ import org.redisson.api.RateType;
import org.springframework.core.DefaultParameterNameDiscoverer; import org.springframework.core.DefaultParameterNameDiscoverer;
import org.springframework.core.ParameterNameDiscoverer; import org.springframework.core.ParameterNameDiscoverer;
import org.springframework.expression.EvaluationContext; import org.springframework.expression.EvaluationContext;
import org.springframework.expression.Expression;
import org.springframework.expression.ExpressionParser; import org.springframework.expression.ExpressionParser;
import org.springframework.expression.ParserContext; import org.springframework.expression.ParserContext;
import org.springframework.expression.common.TemplateParserContext; import org.springframework.expression.common.TemplateParserContext;
@ -100,7 +101,14 @@ public class RateLimiterAspect {
} }
// 解析返回给key // 解析返回给key
try { 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) { } catch (Exception e) {
throw new ServiceException("限流key解析异常!请联系管理员!"); throw new ServiceException("限流key解析异常!请联系管理员!");
} }

@ -49,4 +49,16 @@ public class RedisRateLimiterController {
return R.ok("操作成功", value); 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);
}
} }

Loading…
Cancel
Save