From 09b58c40a7e9d7f3dc18b18dfd75115c920f28fa Mon Sep 17 00:00:00 2001 From: Ludo Mikula Date: Mon, 10 Jul 2023 18:24:51 +0200 Subject: [PATCH] feat: make default API rate limit configurable --- .../lowcoder/api/framework/filter/ThrottlingFilter.java | 7 +++++-- .../src/main/resources/application-lowcoder.yml | 1 + .../src/main/resources/selfhost/ce/application.yml | 1 + 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/framework/filter/ThrottlingFilter.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/framework/filter/ThrottlingFilter.java index 571e18c7d..b8d105a41 100644 --- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/framework/filter/ThrottlingFilter.java +++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/framework/filter/ThrottlingFilter.java @@ -6,6 +6,7 @@ import lombok.extern.slf4j.Slf4j; import org.lowcoder.sdk.config.dynamic.ConfigCenter; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.core.Ordered; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.stereotype.Component; @@ -30,8 +31,10 @@ @Component public class ThrottlingFilter implements WebFilter, Ordered { - private static final int DEFAULT_RATE_THRESHOLD = 50; + @Value("${default.apiRateLimit:50}") + private int defaultApiRateLimit; + private final Map rateLimiterMap = new ConcurrentHashMap<>(); private Supplier> urlRateLimiter; @@ -52,7 +55,7 @@ public Mono filter(@Nonnull ServerWebExchange exchange, @Nonnull WebFilter RateLimiterWrapper rateLimiter = rateLimiterMap.compute(requestUrl, (url, currentLimiter) -> { - int targetRate = urlRateLimiter.get().getOrDefault(url, DEFAULT_RATE_THRESHOLD); + int targetRate = urlRateLimiter.get().getOrDefault(url, defaultApiRateLimit); if (currentLimiter == null) { return RateLimiterWrapper.create(targetRate); } diff --git a/server/api-service/lowcoder-server/src/main/resources/application-lowcoder.yml b/server/api-service/lowcoder-server/src/main/resources/application-lowcoder.yml index 7994c4563..e2b4e1d14 100644 --- a/server/api-service/lowcoder-server/src/main/resources/application-lowcoder.yml +++ b/server/api-service/lowcoder-server/src/main/resources/application-lowcoder.yml @@ -29,6 +29,7 @@ default: org-group-count: 100 org-app-count: 1000 developer-count: 50 + api-rate-limit: 50 common: cookie-name: LOCAL_LOWCODER_TOKEN diff --git a/server/api-service/lowcoder-server/src/main/resources/selfhost/ce/application.yml b/server/api-service/lowcoder-server/src/main/resources/selfhost/ce/application.yml index 15323a7c5..3f5f4ad27 100644 --- a/server/api-service/lowcoder-server/src/main/resources/selfhost/ce/application.yml +++ b/server/api-service/lowcoder-server/src/main/resources/selfhost/ce/application.yml @@ -29,6 +29,7 @@ default: org-group-count: 100 org-app-count: 1000 developer-count: 50 + api-rate-limit: 50 common: cookie-name: LOWCODER_CE_SELFHOST_TOKEN