Class DoSHandler
java.lang.Object
- All Implemented Interfaces:
Handler
,Handler.Container
,Handler.Singleton
,Request.Handler
,Container
,Destroyable
,Dumpable
,Dumpable.DumpableContainer
,LifeCycle
,Invocable
@ManagedObject("DoS Prevention Handler")
public class DoSHandler
extends ConditionalHandler.ElseNext
A Denial of Service Handler that protects from attacks by limiting the request rate from remote clients.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic class
A Handler to reject DoS requests after first delaying them.static class
The Tracker implements the classic Leaky Bucket Algorithm.static class
A Handler to reject DoS requests with a status code or failure.static interface
A RateTracker is associated with an id, and stores request rate data.Nested classes/interfaces inherited from class org.eclipse.jetty.server.handler.ConditionalHandler
ConditionalHandler.Abstract, ConditionalHandler.ConnectorPredicate, ConditionalHandler.DontHandle, ConditionalHandler.ElseNext, ConditionalHandler.InetAddressPatternPredicate, ConditionalHandler.MethodPredicate, ConditionalHandler.PathSpecPredicate, ConditionalHandler.PredicateSet, ConditionalHandler.Reject, ConditionalHandler.SkipNext
Nested classes/interfaces inherited from class org.eclipse.jetty.server.Handler.Abstract
Handler.Abstract.NonBlocking
Nested classes/interfaces inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
AbstractLifeCycle.AbstractLifeCycleListener, AbstractLifeCycle.StopException
Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Container
Container.InheritedListener, Container.Listener
Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Dumpable
Dumpable.DumpableContainer, Dumpable.DumpAppendable
Nested classes/interfaces inherited from interface org.eclipse.jetty.server.Handler
Handler.AbstractContainer, Handler.Collection, Handler.Container, Handler.Sequence, Handler.Singleton, Handler.Wrapper
Nested classes/interfaces inherited from interface org.eclipse.jetty.util.thread.Invocable
Invocable.Callable, Invocable.InvocationType, Invocable.ReadyTask, Invocable.Task
Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.LifeCycle
LifeCycle.Listener
Nested classes/interfaces inherited from interface org.eclipse.jetty.server.Request.Handler
Request.Handler.AbortException
-
Field Summary
FieldsModifier and TypeFieldDescriptionFields inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
FAILED, STARTED, STARTING, STOPPED, STOPPING
Fields inherited from interface org.eclipse.jetty.util.thread.Invocable
__nonBlocking, NOOP
-
Constructor Summary
ConstructorsConstructorDescriptionDoSHandler
(Function<Request, String> clientIdFn, DoSHandler.Tracker.Factory trackerFactory, Request.Handler rejectHandler, int maxTrackers) DoSHandler
(DoSHandler.Tracker.Factory trackerFactory) DoSHandler
(Handler handler, Function<Request, String> clientIdFn, DoSHandler.Tracker.Factory trackerFactory, Request.Handler rejectHandler, int maxTrackers) DoSHandler
(Handler handler, Function<Request, String> clientIdFn, DoSHandler.Tracker.Factory trackerFactory, Request.Handler rejectHandler, int maxTrackers, boolean rejectUntracked) -
Method Summary
Modifier and TypeMethodDescriptionprotected void
doStart()
Starts the managed lifecycle beans in the order they were added.protected void
doStop()
Stops the managed lifecycle beans in the reverse order they were added.protected boolean
onConditionsMet
(Request request, Response response, Callback callback) Handle a request that has met the conditions.void
Set theServer
to associate to thisHandler
.Methods inherited from class org.eclipse.jetty.server.handler.ConditionalHandler.ElseNext
onConditionsNotMet
Methods inherited from class org.eclipse.jetty.server.handler.ConditionalHandler
clear, dump, exclude, exclude, exclude, excludeInetAddressPattern, excludeMethod, excludePath, from, from, handle, include, include, include, includeInetAddressPattern, includeMethod, includePath, nextHandler
Methods inherited from class org.eclipse.jetty.server.Handler.Wrapper
getHandler, getInvocationType, setHandler
Methods inherited from class org.eclipse.jetty.server.Handler.AbstractContainer
findContainerOf, getDescendant, getDescendants, isDynamic, setDynamic
Methods inherited from class org.eclipse.jetty.server.Handler.Abstract
destroy, getServer
Methods inherited from class org.eclipse.jetty.util.component.ContainerLifeCycle
addBean, addBean, addEventListener, addManaged, contains, dump, dump, dumpObjects, dumpStdErr, getBean, getBeans, getBeans, getContainedBeans, getContainedBeans, installBean, installBean, isAuto, isManaged, isUnmanaged, manage, removeBean, removeBeans, removeEventListener, setBeans, start, stop, unmanage, updateBean, updateBean, updateBeans, updateBeans
Methods inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
getEventListeners, getState, getState, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, setEventListeners, start, stop, toString
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.eclipse.jetty.util.component.Container
getCachedBeans, getEventListeners
Methods inherited from interface org.eclipse.jetty.util.component.Destroyable
destroy
Methods inherited from interface org.eclipse.jetty.util.component.Dumpable.DumpableContainer
isDumpable
Methods inherited from interface org.eclipse.jetty.server.Handler.Container
getContainer, getDescendant, getDescendants, getDescendants
Methods inherited from interface org.eclipse.jetty.server.Handler.Singleton
getHandlers, getTail, insertHandler, setHandler
Methods inherited from interface org.eclipse.jetty.util.component.LifeCycle
addEventListener, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, removeEventListener, start, stop
-
Field Details
-
ID_FROM_REMOTE_ADDRESS_PORT
-
ID_FROM_REMOTE_ADDRESS
-
ID_FROM_REMOTE_PORT
-
ID_FROM_CONNECTION
-
-
Constructor Details
-
DoSHandler
- Parameters:
trackerFactory
- Factory to create a Tracker
-
DoSHandler
public DoSHandler(@Name("clientIdFn") Function<Request, String> clientIdFn, @Name("trackerFactory") DoSHandler.Tracker.Factory trackerFactory, @Name("rejectHandler") Request.Handler rejectHandler, @Name("maxTrackers") int maxTrackers) - Parameters:
clientIdFn
- Function to extract a remote client identifier from a request.trackerFactory
- Factory to create a TrackerrejectHandler
- AHandler
used to reject excess requests, ornull
for a default.maxTrackers
- The maximum number of remote clients to track or -1 for a default value, 0 for unlimited. If this limit is exceeded, then requests from additional remote clients are rejected.
-
DoSHandler
public DoSHandler(@Name("handler") Handler handler, @Name("clientIdFn") Function<Request, String> clientIdFn, @Name("trackerFactory") DoSHandler.Tracker.Factory trackerFactory, @Name("rejectHandler") Request.Handler rejectHandler, @Name("maxTrackers") int maxTrackers) - Parameters:
handler
- Then nextHandler
ornull
clientIdFn
- Function to extract a remote client identifier from a request.trackerFactory
- Factory to create a TrackerrejectHandler
- AHandler
used to reject excess requests, ornull
for a default.maxTrackers
- The maximum number of remote clients to track or -1 for a default value, 0 for unlimited. If this limit is exceeded, then requests from additional remote clients are rejected.
-
DoSHandler
public DoSHandler(@Name("handler") Handler handler, @Name("clientIdFn") Function<Request, String> clientIdFn, @Name("trackerFactory") DoSHandler.Tracker.Factory trackerFactory, @Name("rejectHandler") Request.Handler rejectHandler, @Name("maxTrackers") int maxTrackers, @Name("rejectUntracked") boolean rejectUntracked) - Parameters:
handler
- Then nextHandler
ornull
clientIdFn
- Function to extract a remote client identifier from a request.trackerFactory
- Factory to create a TrackerrejectHandler
- AHandler
used to reject excess requests, ornull
for a default.maxTrackers
- The maximum number of remote clients to track or -1 for a default value, 0 for unlimited. If this limit is exceeded, then requests from additional remote clients are rejected.
-
-
Method Details
-
setServer
-
onConditionsMet
protected boolean onConditionsMet(Request request, Response response, Callback callback) throws Exception Description copied from class:ConditionalHandler
Handle a request that has met the conditions. Typically, the implementation will provide optional handling and then call theConditionalHandler.nextHandler(Request, Response, Callback)
method to continue handling.- Specified by:
onConditionsMet
in classConditionalHandler
- Parameters:
request
- The request to handleresponse
- The response to generatecallback
- The callback for completion- Returns:
- True if this handler will complete the callback
- Throws:
Exception
- If there is a problem handling- See Also:
-
doStart
Description copied from class:ContainerLifeCycle
Starts the managed lifecycle beans in the order they were added.- Overrides:
doStart
in classConditionalHandler
- Throws:
Exception
- If there was a problem starting. Will cause a transition to FAILED state
-
doStop
Description copied from class:ContainerLifeCycle
Stops the managed lifecycle beans in the reverse order they were added.- Overrides:
doStop
in classHandler.Abstract
- Throws:
Exception
- If there was a problem stopping. Will cause a transition to FAILED state
-