Class ConnectHandler

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 Classes
    Modifier and Type
    Class
    Description
    protected static class 
     
    protected class 
     
    class 
     
    class 
     

    Nested classes/interfaces inherited from class org.eclipse.jetty.server.handler.AbstractHandler

    org.eclipse.jetty.server.handler.AbstractHandler.ErrorDispatchHandler

    Nested classes/interfaces inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle

    org.eclipse.jetty.util.component.AbstractLifeCycle.AbstractLifeCycleListener, org.eclipse.jetty.util.component.AbstractLifeCycle.StopException

    Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Container

    org.eclipse.jetty.util.component.Container.InheritedListener, org.eclipse.jetty.util.component.Container.Listener

    Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Dumpable

    org.eclipse.jetty.util.component.Dumpable.DumpableContainer

    Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.LifeCycle

    org.eclipse.jetty.util.component.LifeCycle.Listener
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected static final org.slf4j.Logger
     

    Fields inherited from class org.eclipse.jetty.server.handler.HandlerWrapper

    _handler

    Fields inherited from class org.eclipse.jetty.util.component.AbstractLifeCycle

    FAILED, STARTED, STARTING, STOPPED, STOPPING

    Fields inherited from interface org.eclipse.jetty.util.component.Dumpable

    KEY
  • Constructor Summary

    Constructors
    Constructor
    Description
     
    ConnectHandler(org.eclipse.jetty.server.Handler handler)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    protected void
    connectToServer(jakarta.servlet.http.HttpServletRequest request, String host, int port, org.eclipse.jetty.util.Promise<SocketChannel> promise)
     
    protected void
     
     
    int
     
    org.eclipse.jetty.io.ByteBufferPool
     
    long
     
     
    long
     
    org.eclipse.jetty.util.thread.Scheduler
     
     
    void
    handle(String target, org.eclipse.jetty.server.Request jettyRequest, jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response)
     
    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.
    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.
    newConnectAddress(String host, int port)
    Creates the server address to connect to.
    newDownstreamConnection(org.eclipse.jetty.io.EndPoint endPoint, ConcurrentMap<String,Object> context)
     
    protected org.eclipse.jetty.io.SelectorManager
     
    newUpstreamConnection(org.eclipse.jetty.io.EndPoint endPoint, ConnectHandler.ConnectContext connectContext)
     
    protected void
    onConnectFailure(jakarta.servlet.http.HttpServletRequest request, jakarta.servlet.http.HttpServletResponse response, jakarta.servlet.AsyncContext asyncContext, Throwable failure)
     
    protected void
     
    protected void
    prepareContext(jakarta.servlet.http.HttpServletRequest request, ConcurrentMap<String,Object> context)
     
    protected int
    read(org.eclipse.jetty.io.EndPoint endPoint, ByteBuffer buffer, ConcurrentMap<String,Object> context)
    Reads (with non-blocking semantic) into the given buffer from the given endPoint.
    void
    setBufferSize(int bufferSize)
     
    void
    setByteBufferPool(org.eclipse.jetty.io.ByteBufferPool bufferPool)
     
    void
    setConnectTimeout(long connectTimeout)
     
    void
     
    void
    setIdleTimeout(long idleTimeout)
     
    void
    setScheduler(org.eclipse.jetty.util.thread.Scheduler scheduler)
     
    boolean
    validateDestination(String host, int port)
    Checks the given host and port against whitelist and blacklist.
    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.

    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

    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, dumpObjects, dumpStdErr, getBean, getBeans, getBeans, getContainedBeans, getContainedBeans, 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.Dumpable

    dumpSelf

    Methods inherited from interface org.eclipse.jetty.util.component.Dumpable.DumpableContainer

    isDumpable

    Methods 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

      public Executor getExecutor()
    • setExecutor

      public void setExecutor(Executor executor)
    • 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

      protected void doStart() throws Exception
      Overrides:
      doStart in class org.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:
      handle in interface org.eclipse.jetty.server.Handler
      Overrides:
      handle in class org.eclipse.jetty.server.handler.HandlerWrapper
      Throws:
      jakarta.servlet.ServletException
      IOException
    • 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-Authorization that authenticate the client with the proxy.

      Parameters:
      baseRequest - Jetty-specific http request
      request - the http request
      response - the http response
      serverAddress - the remote server address in the form host:port
    • connectToServer

      protected void connectToServer(jakarta.servlet.http.HttpServletRequest request, String host, int port, org.eclipse.jetty.util.Promise<SocketChannel> promise)
    • newConnectAddress

      protected InetSocketAddress newConnectAddress(String host, int port)
      Creates the server address to connect to.
      Parameters:
      host - The host from the CONNECT request
      port - 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 request
      response - the HTTP response
      address - the address of the remote server in the form host: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 IOException

      Reads (with non-blocking semantic) into the given buffer from the given endPoint.

      Parameters:
      endPoint - the endPoint to read from
      buffer - the buffer to read data into
      context - 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 to
      buffer - the buffer to write
      callback - the completion callback to invoke
      context - the context information related to the connection
    • getWhiteListHosts

      public Set<String> getWhiteListHosts()
    • getBlackListHosts

      public Set<String> getBlackListHosts()
    • validateDestination

      public boolean validateDestination(String host, int port)
      Checks the given host and port against whitelist and blacklist.
      Parameters:
      host - the host to check
      port - the port to check
      Returns:
      true if it is allowed to connect to the given host and port