Package org.eclipse.jetty.proxy
Class ConnectHandler
- java.lang.Object
-
- All Implemented Interfaces:
Handler
,HandlerContainer
,Container
,Destroyable
,Dumpable
,Dumpable.DumpableContainer
,LifeCycle
public class ConnectHandler extends HandlerWrapper
Implementation of a
Handler
that supports HTTP CONNECT.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static class
ConnectHandler.ConnectContext
protected class
ConnectHandler.ConnectManager
class
ConnectHandler.DownstreamConnection
class
ConnectHandler.UpstreamConnection
-
Nested classes/interfaces inherited from class org.eclipse.jetty.server.handler.AbstractHandler
AbstractHandler.ErrorDispatchHandler
-
Nested classes/interfaces inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
AbstractLifeCycle.AbstractLifeCycleListener
-
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
-
Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.LifeCycle
LifeCycle.Listener
-
-
Field Summary
Fields Modifier and Type Field Description protected static Logger
LOG
-
Fields inherited from class org.eclipse.jetty.server.handler.HandlerWrapper
_handler
-
-
Constructor Summary
Constructors Constructor Description ConnectHandler()
ConnectHandler(Handler handler)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected void
connectToServer(javax.servlet.http.HttpServletRequest request, java.lang.String host, int port, Promise<java.nio.channels.SocketChannel> promise)
protected void
doStart()
Starts the managed lifecycle beans in the order they were added.java.util.Set<java.lang.String>
getBlackListHosts()
int
getBufferSize()
ByteBufferPool
getByteBufferPool()
long
getConnectTimeout()
java.util.concurrent.Executor
getExecutor()
long
getIdleTimeout()
Scheduler
getScheduler()
java.util.Set<java.lang.String>
getWhiteListHosts()
void
handle(java.lang.String target, Request baseRequest, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
Handle a request.protected boolean
handleAuthentication(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, java.lang.String address)
Handles the authentication before setting up the tunnel to the remote server.protected void
handleConnect(Request baseRequest, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, java.lang.String serverAddress)
Handles a CONNECT request.protected java.net.InetSocketAddress
newConnectAddress(java.lang.String host, int port)
Creates the server address to connect to.protected ConnectHandler.DownstreamConnection
newDownstreamConnection(EndPoint endPoint, java.util.concurrent.ConcurrentMap<java.lang.String,java.lang.Object> context)
protected SelectorManager
newSelectorManager()
protected ConnectHandler.UpstreamConnection
newUpstreamConnection(EndPoint endPoint, ConnectHandler.ConnectContext connectContext)
protected void
onConnectFailure(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, javax.servlet.AsyncContext asyncContext, java.lang.Throwable failure)
protected void
onConnectSuccess(ConnectHandler.ConnectContext connectContext, ConnectHandler.UpstreamConnection upstreamConnection)
protected void
prepareContext(javax.servlet.http.HttpServletRequest request, java.util.concurrent.ConcurrentMap<java.lang.String,java.lang.Object> context)
protected int
read(EndPoint endPoint, java.nio.ByteBuffer buffer, java.util.concurrent.ConcurrentMap<java.lang.String,java.lang.Object> context)
Reads (with non-blocking semantic) into the givenbuffer
from the givenendPoint
.void
setBufferSize(int bufferSize)
void
setByteBufferPool(ByteBufferPool bufferPool)
void
setConnectTimeout(long connectTimeout)
void
setExecutor(java.util.concurrent.Executor executor)
void
setIdleTimeout(long idleTimeout)
void
setScheduler(Scheduler scheduler)
boolean
validateDestination(java.lang.String host, int port)
Checks the givenhost
andport
against whitelist and blacklist.protected void
write(EndPoint endPoint, java.nio.ByteBuffer buffer, Callback callback, java.util.concurrent.ConcurrentMap<java.lang.String,java.lang.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, setHandler
-
Methods inherited from class org.eclipse.jetty.server.handler.AbstractHandlerContainer
doShutdown, expandHandler, findContainerOf, getChildHandlerByClass, getChildHandlers, getChildHandlersByClass, setServer
-
Methods inherited from class org.eclipse.jetty.server.handler.AbstractHandler
doError, doStop, getServer
-
Methods inherited from class org.eclipse.jetty.util.component.ContainerLifeCycle
addBean, addBean, addEventListener, addManaged, contains, dump, dump, dump, dump, dump, dumpBeans, dumpObject, dumpObjects, dumpStdErr, dumpThis, getBean, getBeans, getBeans, getContainedBeans, getContainedBeans, isAuto, isManaged, isUnmanaged, manage, removeBean, removeBeans, removeEventListener, setBeans, setStopTimeout, start, stop, unmanage, updateBean, updateBean, updateBeans
-
Methods inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle
addLifeCycleListener, getState, getState, getStopTimeout, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, removeLifeCycleListener, 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.Dumpable.DumpableContainer
isDumpable
-
Methods inherited from interface org.eclipse.jetty.util.component.LifeCycle
addLifeCycleListener, isFailed, isRunning, isStarted, isStarting, isStopped, isStopping, removeLifeCycleListener, start, stop
-
-
-
-
Field Detail
-
LOG
protected static final Logger LOG
-
-
Constructor Detail
-
ConnectHandler
public ConnectHandler()
-
ConnectHandler
public ConnectHandler(Handler handler)
-
-
Method Detail
-
getExecutor
public java.util.concurrent.Executor getExecutor()
-
setExecutor
public void setExecutor(java.util.concurrent.Executor executor)
-
getScheduler
public Scheduler getScheduler()
-
setScheduler
public void setScheduler(Scheduler scheduler)
-
getByteBufferPool
public ByteBufferPool getByteBufferPool()
-
setByteBufferPool
public void setByteBufferPool(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
protected void doStart() throws java.lang.Exception
Description copied from class:ContainerLifeCycle
Starts the managed lifecycle beans in the order they were added.- Overrides:
doStart
in classAbstractHandler
- Throws:
java.lang.Exception
-
newSelectorManager
protected SelectorManager newSelectorManager()
-
handle
public void handle(java.lang.String target, Request baseRequest, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException
Description copied from interface:Handler
Handle a request.- Specified by:
handle
in interfaceHandler
- Overrides:
handle
in classHandlerWrapper
- Parameters:
target
- The target of the request - either a URI or a name.baseRequest
- The original unwrapped request object.request
- The request either as theRequest
object or a wrapper of that request. The
method can be used access the Request object if required.HttpConnection.getCurrentConnection()
.getHttpChannel()
.getRequest()
response
- The response as theResponse
object or a wrapper of that request. The
method can be used access the Response object if required.HttpConnection.getCurrentConnection()
.getHttpChannel()
.getResponse()
- Throws:
javax.servlet.ServletException
- if unable to handle the request or response due to underlying servlet issuejava.io.IOException
- if unable to handle the request or response processing
-
handleConnect
protected void handleConnect(Request baseRequest, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, java.lang.String serverAddress)
Handles a CONNECT request.
CONNECT requests may have authentication headers such as
Proxy-Authorization
that 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(javax.servlet.http.HttpServletRequest request, java.lang.String host, int port, Promise<java.nio.channels.SocketChannel> promise)
-
newConnectAddress
protected java.net.InetSocketAddress newConnectAddress(java.lang.String host, int port)
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(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, javax.servlet.AsyncContext asyncContext, java.lang.Throwable failure)
-
handleAuthentication
protected boolean handleAuthentication(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, java.lang.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(EndPoint endPoint, java.util.concurrent.ConcurrentMap<java.lang.String,java.lang.Object> context)
-
newUpstreamConnection
protected ConnectHandler.UpstreamConnection newUpstreamConnection(EndPoint endPoint, ConnectHandler.ConnectContext connectContext)
-
prepareContext
protected void prepareContext(javax.servlet.http.HttpServletRequest request, java.util.concurrent.ConcurrentMap<java.lang.String,java.lang.Object> context)
-
read
protected int read(EndPoint endPoint, java.nio.ByteBuffer buffer, java.util.concurrent.ConcurrentMap<java.lang.String,java.lang.Object> context) throws java.io.IOException
Reads (with non-blocking semantic) into the given
buffer
from 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:
java.io.IOException
- if the endPoint cannot be read
-
write
protected void write(EndPoint endPoint, java.nio.ByteBuffer buffer, Callback callback, java.util.concurrent.ConcurrentMap<java.lang.String,java.lang.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
public java.util.Set<java.lang.String> getWhiteListHosts()
-
getBlackListHosts
public java.util.Set<java.lang.String> getBlackListHosts()
-
validateDestination
public boolean validateDestination(java.lang.String host, int port)
Checks the givenhost
andport
against 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
-
-