java.lang.Object
org.eclipse.jetty.util.component.AbstractLifeCycle
org.eclipse.jetty.util.component.ContainerLifeCycle
org.eclipse.jetty.server.handler.AbstractHandler
org.eclipse.jetty.server.handler.AbstractHandlerContainer
org.eclipse.jetty.server.handler.HandlerWrapper
org.eclipse.jetty.proxy.ConnectHandler
- All Implemented Interfaces:
org.eclipse.jetty.server.Handler,org.eclipse.jetty.server.HandlerContainer,org.eclipse.jetty.util.component.Container,org.eclipse.jetty.util.component.Destroyable,org.eclipse.jetty.util.component.Dumpable,org.eclipse.jetty.util.component.Dumpable.DumpableContainer,org.eclipse.jetty.util.component.LifeCycle
public class ConnectHandler
extends org.eclipse.jetty.server.handler.HandlerWrapper
Implementation of a Handler that supports HTTP CONNECT.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected static classprotected classclassclassNested classes/interfaces inherited from class org.eclipse.jetty.server.handler.AbstractHandler
org.eclipse.jetty.server.handler.AbstractHandler.ErrorDispatchHandlerNested classes/interfaces inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
org.eclipse.jetty.util.component.AbstractLifeCycle.AbstractLifeCycleListener, org.eclipse.jetty.util.component.AbstractLifeCycle.StopExceptionNested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Container
org.eclipse.jetty.util.component.Container.InheritedListener, org.eclipse.jetty.util.component.Container.ListenerNested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Dumpable
org.eclipse.jetty.util.component.Dumpable.DumpableContainerNested classes/interfaces inherited from interface org.eclipse.jetty.util.component.LifeCycle
org.eclipse.jetty.util.component.LifeCycle.Listener -
Field Summary
FieldsFields inherited from class org.eclipse.jetty.server.handler.HandlerWrapper
_handlerFields inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
FAILED, STARTED, STARTING, STOPPED, STOPPINGFields inherited from interface org.eclipse.jetty.util.component.Dumpable
KEY -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected voidconnectToServer(jakarta.servlet.http.HttpServletRequest request, String host, int port, org.eclipse.jetty.util.Promise<SocketChannel> promise) protected voiddoStart()intorg.eclipse.jetty.io.ByteBufferPoollonglongorg.eclipse.jetty.util.thread.Schedulervoidhandle(String target, org.eclipse.jetty.server.Request jettyRequest, jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response) protected booleanhandleAuthentication(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response, String address) Handles the authentication before setting up the tunnel to the remote server.protected voidhandleConnect(org.eclipse.jetty.server.Request baseRequest, jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response, String serverAddress) Handles a CONNECT request.protected InetSocketAddressnewConnectAddress(String host, int port) Creates the server address to connect to.protected ConnectHandler.DownstreamConnectionnewDownstreamConnection(org.eclipse.jetty.io.EndPoint endPoint, ConcurrentMap<String, Object> context) protected org.eclipse.jetty.io.SelectorManagerprotected ConnectHandler.UpstreamConnectionnewUpstreamConnection(org.eclipse.jetty.io.EndPoint endPoint, ConnectHandler.ConnectContext connectContext) protected voidonConnectFailure(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response, jakarta.servlet.AsyncContext asyncContext, Throwable failure) protected voidonConnectSuccess(ConnectHandler.ConnectContext connectContext, ConnectHandler.UpstreamConnection upstreamConnection) protected voidprepareContext(jakarta.servlet.http.HttpServletRequest request, ConcurrentMap<String, Object> context) protected intread(org.eclipse.jetty.io.EndPoint endPoint, ByteBuffer buffer, ConcurrentMap<String, Object> context) Reads (with non-blocking semantic) into the givenbufferfrom the givenendPoint.voidsetBufferSize(int bufferSize) voidsetByteBufferPool(org.eclipse.jetty.io.ByteBufferPool bufferPool) voidsetConnectTimeout(long connectTimeout) voidsetExecutor(Executor executor) voidsetIdleTimeout(long idleTimeout) voidsetScheduler(org.eclipse.jetty.util.thread.Scheduler scheduler) booleanvalidateDestination(String host, int port) Checks the givenhostandportagainst whitelist and blacklist.protected voidwrite(org.eclipse.jetty.io.EndPoint endPoint, ByteBuffer buffer, org.eclipse.jetty.util.Callback callback, ConcurrentMap<String, Object> context) Writes (with non-blocking semantic) the given buffer of data onto the given endPoint.Methods inherited from class org.eclipse.jetty.server.handler.HandlerWrapper
destroy, expandChildren, getHandler, getHandlers, insertHandler, setHandlerMethods inherited from class org.eclipse.jetty.server.handler.AbstractHandlerContainer
expandHandler, findContainerOf, getChildHandlerByClass, getChildHandlers, getChildHandlersByClass, setServerMethods inherited from class org.eclipse.jetty.server.handler.AbstractHandler
doError, doStop, getServerMethods inherited from class org.eclipse.jetty.util.component.ContainerLifeCycle
addBean, addBean, addEventListener, addManaged, contains, dump, dump, dump, dumpObjects, dumpStdErr, getBean, getBeans, getBeans, getContainedBeans, getContainedBeans, isAuto, isManaged, isUnmanaged, manage, removeBean, removeBeans, removeEventListener, setBeans, start, stop, unmanage, updateBean, updateBean, updateBeans, updateBeansMethods inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
getEventListeners, getState, getState, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, setEventListeners, start, stop, toStringMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface org.eclipse.jetty.util.component.Container
getCachedBeans, getEventListenersMethods inherited from interface org.eclipse.jetty.util.component.Dumpable
dumpSelfMethods inherited from interface org.eclipse.jetty.util.component.Dumpable.DumpableContainer
isDumpableMethods inherited from interface org.eclipse.jetty.util.component.LifeCycle
addEventListener, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, removeEventListener, start, stop
-
Field Details
-
LOG
protected static final org.slf4j.Logger LOG
-
-
Constructor Details
-
ConnectHandler
public ConnectHandler() -
ConnectHandler
public ConnectHandler(org.eclipse.jetty.server.Handler handler)
-
-
Method Details
-
getExecutor
-
setExecutor
-
getScheduler
public org.eclipse.jetty.util.thread.Scheduler getScheduler() -
setScheduler
public void setScheduler(org.eclipse.jetty.util.thread.Scheduler scheduler) -
getByteBufferPool
public org.eclipse.jetty.io.ByteBufferPool getByteBufferPool() -
setByteBufferPool
public void setByteBufferPool(org.eclipse.jetty.io.ByteBufferPool bufferPool) -
getConnectTimeout
public long getConnectTimeout()- Returns:
- the timeout, in milliseconds, to connect to the remote server
-
setConnectTimeout
public void setConnectTimeout(long connectTimeout) - Parameters:
connectTimeout- the timeout, in milliseconds, to connect to the remote server
-
getIdleTimeout
public long getIdleTimeout()- Returns:
- the idle timeout, in milliseconds
-
setIdleTimeout
public void setIdleTimeout(long idleTimeout) - Parameters:
idleTimeout- the idle timeout, in milliseconds
-
getBufferSize
public int getBufferSize() -
setBufferSize
public void setBufferSize(int bufferSize) -
doStart
- Overrides:
doStartin classorg.eclipse.jetty.server.handler.AbstractHandler- Throws:
Exception
-
newSelectorManager
protected org.eclipse.jetty.io.SelectorManager newSelectorManager() -
handle
public void handle(String target, org.eclipse.jetty.server.Request jettyRequest, jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response) throws jakarta.servlet.ServletException, IOException - Specified by:
handlein interfaceorg.eclipse.jetty.server.Handler- Overrides:
handlein classorg.eclipse.jetty.server.handler.HandlerWrapper- Throws:
jakarta.servlet.ServletExceptionIOException
-
handleConnect
protected void handleConnect(org.eclipse.jetty.server.Request baseRequest, jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response, String serverAddress) Handles a CONNECT request.
CONNECT requests may have authentication headers such as
Proxy-Authorizationthat authenticate the client with the proxy.- Parameters:
baseRequest- Jetty-specific http requestrequest- the http requestresponse- the http responseserverAddress- the remote server address in the formhost:port
-
connectToServer
protected void connectToServer(jakarta.servlet.http.HttpServletRequest request, String host, int port, org.eclipse.jetty.util.Promise<SocketChannel> promise) -
newConnectAddress
Creates the server address to connect to.- Parameters:
host- The host from the CONNECT requestport- The port from the CONNECT request- Returns:
- The InetSocketAddress to connect to.
-
onConnectSuccess
protected void onConnectSuccess(ConnectHandler.ConnectContext connectContext, ConnectHandler.UpstreamConnection upstreamConnection) -
onConnectFailure
protected void onConnectFailure(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response, jakarta.servlet.AsyncContext asyncContext, Throwable failure) -
handleAuthentication
protected boolean handleAuthentication(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response, String address) Handles the authentication before setting up the tunnel to the remote server.
The default implementation returns true.
- Parameters:
request- the HTTP requestresponse- the HTTP responseaddress- the address of the remote server in the formhost:port.- Returns:
- true to allow to connect to the remote host, false otherwise
-
newDownstreamConnection
protected ConnectHandler.DownstreamConnection newDownstreamConnection(org.eclipse.jetty.io.EndPoint endPoint, ConcurrentMap<String, Object> context) -
newUpstreamConnection
protected ConnectHandler.UpstreamConnection newUpstreamConnection(org.eclipse.jetty.io.EndPoint endPoint, ConnectHandler.ConnectContext connectContext) -
prepareContext
protected void prepareContext(jakarta.servlet.http.HttpServletRequest request, ConcurrentMap<String, Object> context) -
read
protected int read(org.eclipse.jetty.io.EndPoint endPoint, ByteBuffer buffer, ConcurrentMap<String, Object> context) throws IOExceptionReads (with non-blocking semantic) into the given
bufferfrom the givenendPoint.- Parameters:
endPoint- the endPoint to read frombuffer- the buffer to read data intocontext- the context information related to the connection- Returns:
- the number of bytes read (possibly 0 since the read is non-blocking) or -1 if the channel has been closed remotely
- Throws:
IOException- if the endPoint cannot be read
-
write
protected void write(org.eclipse.jetty.io.EndPoint endPoint, ByteBuffer buffer, org.eclipse.jetty.util.Callback callback, ConcurrentMap<String, Object> context) Writes (with non-blocking semantic) the given buffer of data onto the given endPoint.
- Parameters:
endPoint- the endPoint to write tobuffer- the buffer to writecallback- the completion callback to invokecontext- the context information related to the connection
-
getWhiteListHosts
-
getBlackListHosts
-
validateDestination
Checks the givenhostandportagainst whitelist and blacklist.- Parameters:
host- the host to checkport- the port to check- Returns:
- true if it is allowed to connect to the given host and port
-