diff --git a/ruoyi-extend/ruoyi-isc-gateway/src/main/java/com/ruoyi/gateway/config/RedisConfig.java b/ruoyi-extend/ruoyi-isc-gateway/src/main/java/com/ruoyi/gateway/config/RedisConfig.java index adc4f28da..c238e3b2e 100644 --- a/ruoyi-extend/ruoyi-isc-gateway/src/main/java/com/ruoyi/gateway/config/RedisConfig.java +++ b/ruoyi-extend/ruoyi-isc-gateway/src/main/java/com/ruoyi/gateway/config/RedisConfig.java @@ -89,12 +89,17 @@ public class RedisConfig extends CachingConfigurerSupport { .append("local key = KEYS[1]\n") .append("local count = tonumber(ARGV[1])\n") .append("local time = tonumber(ARGV[2])\n") - .append("local current = redis.call('get', key);\n") - .append("if current and tonumber(current) > count then\n") + .append("local current = tonumber(redis.call('get', key));\n") + .append("if current == nil then\n") + .append(" current = 1 \n") + .append("end\n") + //.append("redis.log(redis.LOG_WARNING, \"current \" .. current)\n") + .append("if current > count then\n") .append(" return current;\n") .append("end\n") - .append("current = redis.call('incr', key)\n") - .append("if tonumber(current) == 1 then\n") + .append("current = tonumber(redis.call('incr', key))\n") + //.append("redis.log(redis.LOG_WARNING, \"current \" .. current)\n") + .append("if current == 1 then\n") .append(" redis.call('expire', key, time)\n") .append("end\n") .append("return current;") diff --git a/ruoyi-extend/ruoyi-isc-gateway/src/main/java/com/ruoyi/gateway/filter/CustomerGlobalFilter.java b/ruoyi-extend/ruoyi-isc-gateway/src/main/java/com/ruoyi/gateway/filter/CustomerGlobalFilter.java index a381bd219..f4b9a6f0b 100644 --- a/ruoyi-extend/ruoyi-isc-gateway/src/main/java/com/ruoyi/gateway/filter/CustomerGlobalFilter.java +++ b/ruoyi-extend/ruoyi-isc-gateway/src/main/java/com/ruoyi/gateway/filter/CustomerGlobalFilter.java @@ -289,8 +289,7 @@ public class CustomerGlobalFilter implements GlobalFilter, Ordered { private Mono rateLimiter(ServerWebExchange exchange, IscRule rule, Route route, final int index, Supplier> rateLimiterAfterSupplier) { final TimeUnit timeUnit = TIME_UNITS[index]; - final Long limit = TimeUnit.SECONDS.equals(timeUnit) ? rule.getSecondsLimit() : - TimeUnit.MINUTES.equals(timeUnit) + final Long limit = TimeUnit.SECONDS.equals(timeUnit) ? rule.getSecondsLimit() : TimeUnit.MINUTES.equals(timeUnit) ? rule.getMinutesLimit() : TimeUnit.HOURS.equals(timeUnit) ? rule.getHoursLimit() : rule.getDaysLimit(); if (Objects.isNull(limit) || limit <= 0L) { if (TimeUnit.DAYS.equals(timeUnit)) { diff --git a/ruoyi-extend/ruoyi-isc-gateway/src/main/java/com/ruoyi/gateway/ratelimit/CustomerRedisRateLimiter.java b/ruoyi-extend/ruoyi-isc-gateway/src/main/java/com/ruoyi/gateway/ratelimit/CustomerRedisRateLimiter.java index 5c2acaea7..2e2289b80 100644 --- a/ruoyi-extend/ruoyi-isc-gateway/src/main/java/com/ruoyi/gateway/ratelimit/CustomerRedisRateLimiter.java +++ b/ruoyi-extend/ruoyi-isc-gateway/src/main/java/com/ruoyi/gateway/ratelimit/CustomerRedisRateLimiter.java @@ -149,7 +149,7 @@ public class CustomerRedisRateLimiter extends RedisRateLimiter { } return Mono.just(-1L); }).map(tokensLeft -> { - boolean allowed = tokensLeft < replenishRate; + boolean allowed = tokensLeft > 0 && tokensLeft < replenishRate; Response response = new Response(allowed, getHeaders(routeConfig, tokensLeft, timeUnit)); if (log.isDebugEnabled()) { log.debug("response: " + response);