From bb386d0f5463202a8b10173791206819be6c51f9 Mon Sep 17 00:00:00 2001 From: Tankaikai Date: Wed, 2 Apr 2025 17:08:23 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=BE=E5=BC=80=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sqx/common/aspect/RateLimitAspect.java | 50 ++++++++++--------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/sqx/common/aspect/RateLimitAspect.java b/src/main/java/com/sqx/common/aspect/RateLimitAspect.java index fecc2762..b3a91b34 100644 --- a/src/main/java/com/sqx/common/aspect/RateLimitAspect.java +++ b/src/main/java/com/sqx/common/aspect/RateLimitAspect.java @@ -40,29 +40,31 @@ public class RateLimitAspect { @Around("serviceLimit()") public Object around(ProceedingJoinPoint point) throws Throwable { - // 获取当前请求 - ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); - HttpServletRequest request = attributes.getRequest(); - // 获取请求的 IP 地址 - String ip = IPUtils.getIpAddr(request); - - // 获取方法上的 @AccessLimit 注解 - MethodSignature signature = (MethodSignature) point.getSignature(); - Method method = signature.getMethod(); - Limiting accessLimit = method.getAnnotation(Limiting.class); - double permitsPerSecond = accessLimit.limitNum(); - - // 获取或创建该 IP 对应的 RateLimiter - RateLimiter rateLimiter = RATE_LIMITER.computeIfAbsent(ip, k -> RateLimiter.create(permitsPerSecond)); - - // 尝试获取许可 - if (rateLimiter.tryAcquire()) { - // 成功获取许可,继续执行方法 - return point.proceed(); - } else { - // 未获取到许可,抛出异常或返回错误信息 - log.info("IP: {} 请求方法: {} 超过访问频率限制", ip, method.getName()); - throw new LimitException("访问频率过高,请稍后再试"); - } + // 成功获取许可,继续执行方法 + return point.proceed(); + //// 获取当前请求 + //ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + //HttpServletRequest request = attributes.getRequest(); + //// 获取请求的 IP 地址 + //String ip = IPUtils.getIpAddr(request); + // + //// 获取方法上的 @AccessLimit 注解 + //MethodSignature signature = (MethodSignature) point.getSignature(); + //Method method = signature.getMethod(); + //Limiting accessLimit = method.getAnnotation(Limiting.class); + //double permitsPerSecond = accessLimit.limitNum(); + // + //// 获取或创建该 IP 对应的 RateLimiter + //RateLimiter rateLimiter = RATE_LIMITER.computeIfAbsent(ip, k -> RateLimiter.create(permitsPerSecond)); + // + //// 尝试获取许可 + //if (rateLimiter.tryAcquire()) { + // // 成功获取许可,继续执行方法 + // return point.proceed(); + //} else { + // // 未获取到许可,抛出异常或返回错误信息 + // log.info("IP: {} 请求方法: {} 超过访问频率限制", ip, method.getName()); + // throw new LimitException("访问频率过高,请稍后再试"); + //} } }