Package org.languagetool.server
Class RequestLimiter
- java.lang.Object
-
- org.languagetool.server.RequestLimiter
-
- Direct Known Subclasses:
ErrorRequestLimiter
class RequestLimiter extends java.lang.Object
Limit 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 class
RequestLimiter.RequestEvent
-
Field Summary
Fields Modifier and Type Field Description private int
ipFingerprintFactor
private DatabaseLogger
logger
(package private) static int
REQUEST_QUEUE_SIZE
(package private) java.util.List<RequestLimiter.RequestEvent>
requestEvents
private int
requestLimit
private int
requestLimitInBytes
private int
requestLimitPeriodInSeconds
private java.lang.Long
server
-
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) 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)
(package private) 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)
(package private) 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)
private java.lang.Long
getClientId(java.util.Map<java.lang.String,java.lang.String> parameters)
private java.lang.String
getReferer(java.util.Map<java.lang.String,java.util.List<java.lang.String>> httpHeader)
(package private) int
getRequestLimit()
The maximum number of request pergetRequestLimitPeriodInSeconds()
.(package private) int
getRequestLimitInBytes()
The maximum number of request bytes pergetRequestLimitPeriodInSeconds()
.(package private) int
getRequestLimitPeriodInSeconds()
The time period over which requests are considered, in seconds.private int
getRequestSize(java.util.Map<java.lang.String,java.lang.String> params)
private java.lang.String
getUserAgent(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)
-
-