Class ThreadLimitHandler

  • All Implemented Interfaces:
    Handler, HandlerContainer, org.eclipse.jetty.util.component.Container, org.eclipse.jetty.util.component.Destroyable, org.eclipse.jetty.util.component.Dumpable, org.eclipse.jetty.util.component.LifeCycle

    public class ThreadLimitHandler
    extends HandlerWrapper

    Handler to limit the threads per IP address for DOS protection

    The ThreadLimitHandler applies a limit to the number of Threads that can be used simultaneously per remote IP address.

    The handler makes a determination of the remote IP separately to any that may be made by the ForwardedRequestCustomizer or similar:

    • This handler will use either only a single style of forwarded header. This is on the assumption that a trusted local proxy will produce only a single forwarded header and that any additional headers are likely from untrusted client side proxies.
    • If multiple instances of a forwarded header are provided, this handler will use the right-most instance, which will have been set from the trusted local proxy
    Requests in excess of the limit will be asynchronously suspended until a thread is available.

    This is a simpler alternative to DosFilter

    • Constructor Detail

      • ThreadLimitHandler

        public ThreadLimitHandler()
      • ThreadLimitHandler

        public ThreadLimitHandler​(@Name("forwardedHeader")
                                  String forwardedHeader)
      • ThreadLimitHandler

        public ThreadLimitHandler​(@Name("forwardedHeader")
                                  String forwardedHeader,
                                  @Name("rfc7239")
                                  boolean rfc7239)
    • Method Detail

      • isEnabled

        @ManagedAttribute("true if this handler is enabled")
        public boolean isEnabled()
      • setEnabled

        public void setEnabled​(boolean enabled)
      • getThreadLimit

        @ManagedAttribute("The maximum threads that can be dispatched per remote IP")
        public int getThreadLimit()
      • setThreadLimit

        public void setThreadLimit​(int threadLimit)
      • include

        @ManagedOperation("Include IP in thread limits")
        public void include​(String inetAddressPattern)
      • exclude

        @ManagedOperation("Exclude IP from thread limits")
        public void exclude​(String inetAddressPattern)
      • getThreadLimit

        protected int getThreadLimit​(String ip)
      • getRemote

        protected org.eclipse.jetty.server.handler.ThreadLimitHandler.Remote getRemote​(Request baseRequest)
      • getRemoteIP

        protected String getRemoteIP​(Request baseRequest)