Class RateLimitInterceptor

java.lang.Object
com.predic8.membrane.core.interceptor.AbstractInterceptor
com.predic8.membrane.core.interceptor.ratelimit.RateLimitInterceptor
All Implemented Interfaces:
Interceptor

public class RateLimitInterceptor extends AbstractInterceptor
See Also:
Description

The rateLimiter plugin limits the number of requests of a client in a period of time. As a default the client requests are grouped by client-Ip address and then counted. There are lots of possibilities to group the requests using the keyExpression. The requests can even be counted from different clients together.

When the gateway is located behind a loadbalancer then the client-Ip address is not the one from the client but the address from the balancer. To get the real Ip-address loadbalancers, Web Application Firewalls and reverse proxies set the ip from the original client into the X-Forwarded-For HTTP header field. The limiter plugin can take the Ip-address from the header.

The X-Forwarded-For header can only be trusted when a trustworthy reverse proxy or load balancer is between the client and server. The gateway not should be reachable directly. Only activate this feature when you know what you are doing.

  • Field Details

  • Constructor Details

    • RateLimitInterceptor

      public RateLimitInterceptor()
    • RateLimitInterceptor

      public RateLimitInterceptor(Duration requestLimitDuration, int requestLimit)
  • Method Details

    • handleRequest

      public Outcome handleRequest(Exchange exc) throws Exception
      Specified by:
      handleRequest in interface Interceptor
      Overrides:
      handleRequest in class AbstractInterceptor
      Throws:
      Exception
    • init

      public void init() throws Exception
      Description copied from class: AbstractInterceptor
      Called after parsing is complete and this has been added to the object tree (whose root is Router).
      Overrides:
      init in class AbstractInterceptor
      Throws:
      Exception
    • getClientIp

      protected String getClientIp(Exchange exc)
    • getOneBeforeTrustworthyProxy

      protected static String getOneBeforeTrustworthyProxy(List<String> l, int count)
    • getRequestLimit

      public int getRequestLimit()
    • setRequestLimit

      public void setRequestLimit(int limit)
      Default
      1000
      Description
      Number of requests within the period of measurement.
    • getRequestLimitDuration

      public String getRequestLimitDuration()
    • setRequestLimitDuration

      public void setRequestLimitDuration(String duration)
      See Also:
      Default
      PT3600S
      Description
      Duration after the limit is reset in the ISO 8600 Duration format, e.g. PT10S for 10 seconds, PT5M for 5 minutes or PT8H for eight hours.
    • setRequestLimitDuration

      public void setRequestLimitDuration(Duration duration)
    • setKeyExpression

      public void setKeyExpression(String expression)
      Default
      ip-address
      Description
      The expression the ratelimiter should use to group the requests before counting. The Spring Expression Language (SpEL) is used as language. In the expression the build-in variables request, header, properties can be used.
    • getKeyExpression

      public String getKeyExpression()
    • getTrustedProxyList

      public String getTrustedProxyList()
    • setTrustedProxyList

      public void setTrustedProxyList(String trustedProxyList)
      Default
      empty String
      Description
      Comma separated list of trusted proxy servers and loadbalancers. Used to evaluate the X-Forwarded-For header. If both trustedProxyList and trustedProxyCount is specified, the trustedProxyList is used to determine the client ip address. To make this configuration active set
      isTrustForwardedFor
      to true.
    • getTrustedProxyCount

      public int getTrustedProxyCount()
    • setTrustedProxyCount

      public void setTrustedProxyCount(int trustedProxyCount)
      Default
      0
      Description
      Number of trusted proxy servers and loadbalancers. Used to evaluate the X-Forwarded-For header. If both
      trustedProxyList
      and
      trustedProxyCount
      is specified, the trustedProxyList is used to determine the client ip address. To make this configuration active set
      isTrustForwardedFor
      to true.
    • isTrustForwardedFor

      public boolean isTrustForwardedFor()
    • setTrustForwardedFor

      public void setTrustForwardedFor(boolean trustForwardedFor)
      Default
      false
      Description
      Set this only to true if you know that are you doing. The function of the ratelimter relys on corrent X-ForwaredFor header values.
    • getShortDescription

      public String getShortDescription()
      Specified by:
      getShortDescription in interface Interceptor
      Overrides:
      getShortDescription in class AbstractInterceptor