Class RateLimitingManagerImpl
java.lang.Object
io.vertigo.vega.impl.ratelimiting.RateLimitingManagerImpl
- All Implemented Interfaces:
io.vertigo.core.node.component.Component,io.vertigo.core.node.component.CoreComponent,io.vertigo.core.node.component.Manager,RateLimitingManager
Component is responsible for managing rate-limiting functionality in the application.
It ensures that requests from users or IPs are controlled based on predefined limits to prevent abuse and maintain system stability.
Key Features
Rate Limiting:
- Limits the number of requests per time window (windowSeconds).
- Supports daily rate limits (maxDayRequests).
Modes of Operation:
- nothing: Rate limiting is inactive.
- logOnly: Logs requests exceeding the limit.
- reject: Rejects requests exceeding the limit with an error response.
- banish: Temporarily bans users/IPs exceeding the limit.
Headers: Adds rate-limiting headers (X-Rate-Limit-Limit, X-Rate-Limit-Remaining, X-Rate-Limit-Reset) to responses for transparency.
IP Whitelisting: Allows specific IPs to bypass rate-limiting checks.
Banishment: Temporarily bans users/IPs exceeding limits, with configurable ban duration and multiplier for repeat offenders.
Analytics Integration: Tracks rate-limiting events using the AnalyticsManager.
- Author:
- npiedeloup
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final longstatic final int -
Constructor Summary
ConstructorsConstructorDescriptionRateLimitingManagerImpl(Optional<Integer> windowSeconds, Optional<Long> maxRequests, Optional<Long> maxDayRequests, Optional<Integer> errorCode, Optional<String> overRateLimitMode, Optional<Boolean> insertHeaders, Optional<Boolean> useForwardedFor, Optional<String> useHeaderUserIp, Optional<Boolean> useUserIp, Optional<Integer> logEveryXRequests, Optional<Long> banishSeconds, Optional<Double> banishRepeaterMult, Optional<Long> maxBanishSeconds, Optional<String> banishMessage, Optional<String> whiteListUsers, RateLimitingStorePlugin rateLimitingStorePlugin, io.vertigo.core.analytics.AnalyticsManager analyticsManager) Constructor. -
Method Summary
Modifier and TypeMethodDescriptionvoidCancel all banishments.voidcancelBanishment(String userKey) Cancel banishment of a userkey.booleanisActive()booleanpreHandle(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response) Prehandle request.
-
Field Details
-
DEFAULT_WINDOW_SECONDS
public static final int DEFAULT_WINDOW_SECONDS- See Also:
-
DEFAULT_BANISH_MAX_SECONDS
public static final long DEFAULT_BANISH_MAX_SECONDS- See Also:
-
-
Constructor Details
-
RateLimitingManagerImpl
@Inject public RateLimitingManagerImpl(Optional<Integer> windowSeconds, Optional<Long> maxRequests, Optional<Long> maxDayRequests, Optional<Integer> errorCode, Optional<String> overRateLimitMode, Optional<Boolean> insertHeaders, Optional<Boolean> useForwardedFor, Optional<String> useHeaderUserIp, Optional<Boolean> useUserIp, Optional<Integer> logEveryXRequests, Optional<Long> banishSeconds, Optional<Double> banishRepeaterMult, Optional<Long> maxBanishSeconds, Optional<String> banishMessage, Optional<String> whiteListUsers, RateLimitingStorePlugin rateLimitingStorePlugin, io.vertigo.core.analytics.AnalyticsManager analyticsManager) Constructor.- Parameters:
windowSeconds- Time window for rate limiting (default: 5 minutes).maxRequests- Maximum requests allowed per window (default: 150).maxDayRequests- Maximum requests allowed per day.errorCode- HTTP error code to return when rate limit is exceeded (default: 429 - TOO_MANY_REQUESTS).overRateLimitMode- Mode of operation when rate limit is exceeded (default: reject).insertHeaders- Whether to include rate-limiting headers in responses.useForwardedFor- Use X-Forwarded-For header for IP detection.useHeaderUserIp- Use a custom header for IP detection.useUserIp- Use user IP or session ID for rate-limiting.logEveryXRequests- Number of requests after which to log rate limit exceedances (default: 100).banishSeconds- Initial ban duration (default: 30 minutes).banishRepeaterMult- Multiplier for repeat offenders (default: 2).maxBanishSeconds- Maximum ban duration (default: 7 days).banishMessage- Message returned when a user is banished (default: based on maxRequestsPerMinutes).whiteListUsers- Comma-separated list of IPs to whitelist from rate limiting.
-
-
Method Details
-
isActive
public boolean isActive()- Specified by:
isActivein interfaceRateLimitingManager- Returns:
- true if rateLimiting is active (for fast by-pass)
-
preHandle
public boolean preHandle(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response) throws IOException Description copied from interface:RateLimitingManagerPrehandle request.- Specified by:
preHandlein interfaceRateLimitingManager- Parameters:
request- HttpRequestresponse- HttpResponse- Returns:
- true if request should be managed, false to stop response
- Throws:
IOException
-
cancelBanishment
Description copied from interface:RateLimitingManagerCancel banishment of a userkey.- Specified by:
cancelBanishmentin interfaceRateLimitingManager- Parameters:
userKey- user key to reset
-
cancelAllBanishments
public void cancelAllBanishments()Description copied from interface:RateLimitingManagerCancel all banishments.- Specified by:
cancelAllBanishmentsin interfaceRateLimitingManager
-
getBanishments
- Specified by:
getBanishmentsin interfaceRateLimitingManager- Returns:
- current banished userKey
-