Class ApiRateLimiterAspect

java.lang.Object
com.bytedesk.core.aop.ApiRateLimiterAspect

@Component public class ApiRateLimiterAspect extends Object
https://springdoc.cn/spring/core.html#aop https://blog.csdn.net/MICHAELKING1/article/details/106058874
  • Field Details

    • bytedeskProperties

      @Autowired private BytedeskProperties bytedeskProperties
    • RATE_LIMITER_CACHE

      private static final ConcurrentMap<String,com.google.common.util.concurrent.RateLimiter> RATE_LIMITER_CACHE
    • IP_RATE_LIMITER_CACHE

      private static final ConcurrentMap<String,com.google.common.util.concurrent.RateLimiter> IP_RATE_LIMITER_CACHE
    • DEFAULT_IP_QPS

      private static final double DEFAULT_IP_QPS
      See Also:
    • IP_ACCESS_COUNT_CACHE

      private static final com.google.common.cache.Cache<String,Integer> IP_ACCESS_COUNT_CACHE
  • Constructor Details

    • ApiRateLimiterAspect

      public ApiRateLimiterAspect()
  • Method Details

    • apiRateLimit

      public void apiRateLimit()
    • pointcut

      public Object pointcut(org.aspectj.lang.ProceedingJoinPoint point) throws Throwable
      Throws:
      Throwable
    • doMethodRateLimit

      private Object doMethodRateLimit(org.aspectj.lang.ProceedingJoinPoint point, Method method, ApiRateLimiter apiRateLimiter) throws Throwable
      执行方法级别的限流检查
      Throws:
      Throwable
    • checkIpRateLimit

      private boolean checkIpRateLimit(String ipAddress, String methodName)
      检查IP限流
      Parameters:
      ipAddress - 客户端IP地址
      methodName - 调用的方法名
      Returns:
      是否允许访问
    • resetIpLimit

      public void resetIpLimit(String ipAddress)
      重置指定IP的限流状态
      Parameters:
      ipAddress - IP地址
    • adjustIpLimit

      public void adjustIpLimit(String ipAddress, String methodName, double newRate)
      调整特定IP的QPS限制
      Parameters:
      ipAddress - IP地址
      methodName - 方法名
      newRate - 新的QPS限制