Class 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.
    • 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 per getRequestLimitPeriodInSeconds().
      (package private) int getRequestLimitInBytes()
      The maximum number of request bytes per getRequestLimitPeriodInSeconds().
      (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)  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • 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
    • Constructor Detail

      • RequestLimiter

        RequestLimiter​(int requestLimit,
                       int requestLimitInBytes,
                       int requestLimitPeriodInSeconds,
                       int ipFingerprintFactor)
        Parameters:
        requestLimit - the maximum number of request per requestLimitPeriodInSeconds
        requestLimitPeriodInSeconds - the time period over which requests are considered, in seconds
        ipFingerprintFactor - 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

      • 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)