11package org .lowcoder .api .framework .filter ;
22
3- import com .google .common .util .concurrent .RateLimiter ;
4- import jakarta .annotation .PostConstruct ;
5- import lombok .Getter ;
6- import lombok .extern .slf4j .Slf4j ;
3+ import static java .util .Collections .emptyMap ;
4+ import static org .lowcoder .api .framework .filter .FilterOrder .THROTTLING ;
5+ import static org .lowcoder .sdk .exception .BizError .REQUEST_THROTTLED ;
6+ import static org .lowcoder .sdk .util .ExceptionUtils .ofError ;
7+
8+ import java .util .Map ;
9+ import java .util .concurrent .ConcurrentHashMap ;
10+ import java .util .function .Supplier ;
11+
12+ import javax .annotation .Nonnull ;
13+
714import org .lowcoder .sdk .config .dynamic .ConfigCenter ;
815import org .springframework .beans .factory .annotation .Autowired ;
916import org .springframework .beans .factory .annotation .Value ;
17+ import org .springframework .boot .autoconfigure .condition .ConditionalOnExpression ;
1018import org .springframework .core .Ordered ;
1119import org .springframework .http .server .reactive .ServerHttpRequest ;
1220import org .springframework .stereotype .Component ;
1321import org .springframework .web .server .ServerWebExchange ;
1422import org .springframework .web .server .WebFilter ;
1523import org .springframework .web .server .WebFilterChain ;
16- import reactor .core .publisher .Mono ;
17-
18- import javax .annotation .Nonnull ;
19- import java .util .Map ;
20- import java .util .concurrent .ConcurrentHashMap ;
21- import java .util .function .Supplier ;
2224
23- import static java .util .Collections .emptyMap ;
24- import static org .lowcoder .api .framework .filter .FilterOrder .THROTTLING ;
25- import static org .lowcoder .sdk .exception .BizError .REQUEST_THROTTLED ;
26- import static org .lowcoder .sdk .util .ExceptionUtils .ofError ;
25+ import com .google .common .util .concurrent .RateLimiter ;
2726
27+ import jakarta .annotation .PostConstruct ;
28+ import lombok .Getter ;
29+ import lombok .extern .slf4j .Slf4j ;
30+ import reactor .core .publisher .Mono ;
2831
32+ @ ConditionalOnExpression ("${default.api-rate-limit:0} > 0" )
2933@ SuppressWarnings ("UnstableApiUsage" )
3034@ Slf4j
3135@ Component
3236public class ThrottlingFilter implements WebFilter , Ordered {
3337
34- @ Value ("${default.apiRateLimit:50 }" )
38+ @ Value ("${default.api-rate-limit }" )
3539 private int defaultApiRateLimit ;
3640
3741
@@ -44,6 +48,7 @@ public class ThrottlingFilter implements WebFilter, Ordered {
4448 @ PostConstruct
4549 private void init () {
4650 urlRateLimiter = configCenter .threshold ().ofMap ("urlRateLimiter" , String .class , Integer .class , emptyMap ());
51+ log .info ("API rate limit filter enabled with default rate limit set to: {} requests per second" );
4752 }
4853
4954 @ Nonnull
0 commit comments