Package org.languagetool.server
Class RequestLimiter
- java.lang.Object
-
- org.languagetool.server.RequestLimiter
-
- Direct Known Subclasses:
ErrorRequestLimiter
class RequestLimiter extends java.lang.ObjectLimit the maximum number of request per IP address for a given time range.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static classRequestLimiter.RequestEvent
-
Field Summary
Fields Modifier and Type Field Description private intipFingerprintFactorprivate DatabaseLoggerlogger(package private) static intREQUEST_QUEUE_SIZE(package private) java.util.List<RequestLimiter.RequestEvent>requestEventsprivate intrequestLimitprivate intrequestLimitInBytesprivate intrequestLimitPeriodInSecondsprivate java.lang.Longserver
-
Constructor Summary
Constructors Constructor Description RequestLimiter(int requestLimit, int requestLimitInBytes, int requestLimitPeriodInSeconds)RequestLimiter(int requestLimit, int requestLimitInBytes, int requestLimitPeriodInSeconds, int ipFingerprintFactor)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description (package private) voidcheckAccess(java.lang.String ipAddress, java.util.Map<java.lang.String,java.lang.String> params, java.util.Map<java.lang.String,java.util.List<java.lang.String>> httpHeader)(package private) voidcheckLimit(java.lang.String ipAddress, java.util.Map<java.lang.String,java.lang.String> parameters, java.util.Map<java.lang.String,java.util.List<java.lang.String>> httpHeader)(package private) java.lang.StringcomputeFingerprint(java.util.Map<java.lang.String,java.util.List<java.lang.String>> httpHeader, java.util.Map<java.lang.String,java.lang.String> parameters)private java.lang.LonggetClientId(java.util.Map<java.lang.String,java.lang.String> parameters)private java.lang.StringgetReferer(java.util.Map<java.lang.String,java.util.List<java.lang.String>> httpHeader)(package private) intgetRequestLimit()The maximum number of request pergetRequestLimitPeriodInSeconds().(package private) intgetRequestLimitInBytes()The maximum number of request bytes pergetRequestLimitPeriodInSeconds().(package private) intgetRequestLimitPeriodInSeconds()The time period over which requests are considered, in seconds.private intgetRequestSize(java.util.Map<java.lang.String,java.lang.String> params)private java.lang.StringgetUserAgent(java.util.Map<java.lang.String,java.util.List<java.lang.String>> httpHeader)
-
-
-
Field Detail
-
REQUEST_QUEUE_SIZE
static final int REQUEST_QUEUE_SIZE
- See Also:
- Constant Field Values
-
requestEvents
final java.util.List<RequestLimiter.RequestEvent> requestEvents
-
ipFingerprintFactor
private final int ipFingerprintFactor
-
requestLimit
private final int requestLimit
-
requestLimitInBytes
private final int requestLimitInBytes
-
requestLimitPeriodInSeconds
private final int requestLimitPeriodInSeconds
-
server
private final java.lang.Long server
-
logger
private DatabaseLogger logger
-
-
Constructor Detail
-
RequestLimiter
RequestLimiter(int requestLimit, int requestLimitInBytes, int requestLimitPeriodInSeconds, int ipFingerprintFactor)- Parameters:
requestLimit- the maximum number of request per requestLimitPeriodInSecondsrequestLimitPeriodInSeconds- the time period over which requests are considered, in secondsipFingerprintFactor- allow limits x times larger per ip when fingerprints differ (i.e. assume there may be a maximum of x users behind the same ip)
-
RequestLimiter
RequestLimiter(int requestLimit, int requestLimitInBytes, int requestLimitPeriodInSeconds)
-
-
Method Detail
-
getRequestLimit
int getRequestLimit()
The maximum number of request pergetRequestLimitPeriodInSeconds().
-
getRequestLimitInBytes
int getRequestLimitInBytes()
The maximum number of request bytes pergetRequestLimitPeriodInSeconds().- Since:
- 4.0
-
getRequestLimitPeriodInSeconds
int getRequestLimitPeriodInSeconds()
The time period over which requests are considered, in seconds.
-
computeFingerprint
java.lang.String computeFingerprint(java.util.Map<java.lang.String,java.util.List<java.lang.String>> httpHeader, java.util.Map<java.lang.String,java.lang.String> parameters)
-
checkAccess
void checkAccess(java.lang.String ipAddress, java.util.Map<java.lang.String,java.lang.String> params, java.util.Map<java.lang.String,java.util.List<java.lang.String>> httpHeader)- Parameters:
ipAddress- the client's IP address- Throws:
TooManyRequestsException- if access is not allowed because the request limit is reached
-
getRequestSize
private int getRequestSize(java.util.Map<java.lang.String,java.lang.String> params)
-
getClientId
private java.lang.Long getClientId(java.util.Map<java.lang.String,java.lang.String> parameters)
-
getReferer
private java.lang.String getReferer(java.util.Map<java.lang.String,java.util.List<java.lang.String>> httpHeader)
-
getUserAgent
private java.lang.String getUserAgent(java.util.Map<java.lang.String,java.util.List<java.lang.String>> httpHeader)
-
checkLimit
void checkLimit(java.lang.String ipAddress, java.util.Map<java.lang.String,java.lang.String> parameters, java.util.Map<java.lang.String,java.util.List<java.lang.String>> httpHeader)
-
-