Class ProxyHandler

java.lang.Object
org.eclipse.jetty.util.component.AbstractLifeCycle
org.eclipse.jetty.util.component.ContainerLifeCycle
org.eclipse.jetty.server.Handler.Abstract
org.eclipse.jetty.proxy.ProxyHandler
All Implemented Interfaces:
org.eclipse.jetty.server.Handler, org.eclipse.jetty.server.Request.Handler, 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, org.eclipse.jetty.util.thread.Invocable
Direct Known Subclasses:
ProxyHandler.Forward, ProxyHandler.Reverse

public abstract class ProxyHandler extends org.eclipse.jetty.server.Handler.Abstract

A Handler that can be used to implement a forward proxy ("proxy") or a reverse proxy ("gateway") as defined by RFC 7230.

This class uses HttpClient to send requests from the proxy to the server.

The HttpClient instance is either set explicitly, or created implicitly. To customize the implicit HttpClient instance, applications can override newHttpClient() and configureHttpClient(HttpClient).

See Also:
  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    static class 
    A ProxyHandler that can be used to implement a forward proxy server.
    protected static class 
     
    protected class 
     
    static class 
    A ProxyHandler that can be used to implement a reverse proxy.

    Nested classes/interfaces inherited from class org.eclipse.jetty.server.Handler.Abstract

    org.eclipse.jetty.server.Handler.Abstract.NonBlocking

    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.server.Handler

    org.eclipse.jetty.server.Handler.Abstract, org.eclipse.jetty.server.Handler.AbstractContainer, org.eclipse.jetty.server.Handler.Collection, org.eclipse.jetty.server.Handler.Container, org.eclipse.jetty.server.Handler.Sequence, org.eclipse.jetty.server.Handler.Singleton, org.eclipse.jetty.server.Handler.Wrapper

    Nested classes/interfaces inherited from interface org.eclipse.jetty.util.thread.Invocable

    org.eclipse.jetty.util.thread.Invocable.Callable, org.eclipse.jetty.util.thread.Invocable.InvocationType, org.eclipse.jetty.util.thread.Invocable.ReadyTask, org.eclipse.jetty.util.thread.Invocable.Task

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

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

    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

    Fields inherited from interface org.eclipse.jetty.util.thread.Invocable

    __nonBlocking, NOOP
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    protected void
    addForwardedHeader(org.eclipse.jetty.server.Request clientToProxyRequest, org.eclipse.jetty.client.Request proxyToServerRequest)
     
    protected void
    addProxyHeaders(org.eclipse.jetty.server.Request clientToProxyRequest, org.eclipse.jetty.client.Request proxyToServerRequest)
     
    protected void
    addViaHeader(org.eclipse.jetty.server.Request clientToProxyRequest, org.eclipse.jetty.client.Request proxyToServerRequest)
     
    protected void
    configureHttpClient(org.eclipse.jetty.client.HttpClient httpClient)
    Configures the HttpClient instance before it is started.
    protected void
    copyRequestHeaders(org.eclipse.jetty.server.Request clientToProxyRequest, org.eclipse.jetty.client.Request proxyToServerRequest)
     
    protected void
     
    protected org.eclipse.jetty.http.HttpField
    filterServerToProxyResponseField(org.eclipse.jetty.http.HttpField serverToProxyResponseField)
     
    org.eclipse.jetty.client.HttpClient
     
    Get the proxy-to-server Host header value.
    Get the value to use for the Via header.
    boolean
    handle(org.eclipse.jetty.server.Request clientToProxyRequest, org.eclipse.jetty.server.Response proxyToClientResponse, org.eclipse.jetty.util.Callback proxyToClientCallback)
     
    protected org.eclipse.jetty.client.HttpClient
    Creates a new HttpClient instance, by default with a thread pool named proxy-client and with the dynamic transport configured only with HTTP/1.1.
    protected org.eclipse.jetty.client.Request
    newProxyToServerRequest(org.eclipse.jetty.server.Request clientToProxyRequest, org.eclipse.jetty.http.HttpURI newHttpURI)
     
    protected org.eclipse.jetty.client.Request.Content
    newProxyToServerRequestContent(org.eclipse.jetty.server.Request clientToProxyRequest, org.eclipse.jetty.server.Response proxyToClientResponse, org.eclipse.jetty.client.Request proxyToServerRequest)
     
    protected org.eclipse.jetty.client.Response.CompleteListener
    newServerToProxyResponseListener(org.eclipse.jetty.server.Request clientToProxyRequest, org.eclipse.jetty.client.Request proxyToServerRequest, org.eclipse.jetty.server.Response proxyToClientResponse, org.eclipse.jetty.util.Callback proxyToClientCallback)
     
    protected void
    onProxyToClientResponseComplete(org.eclipse.jetty.server.Request clientToProxyRequest, org.eclipse.jetty.client.Request proxyToServerRequest, org.eclipse.jetty.client.Response serverToProxyResponse, org.eclipse.jetty.server.Response proxyToClientResponse, org.eclipse.jetty.util.Callback proxyToClientCallback)
     
    protected void
    onProxyToClientResponseFailure(org.eclipse.jetty.server.Request clientToProxyRequest, org.eclipse.jetty.client.Request proxyToServerRequest, org.eclipse.jetty.client.Response serverToProxyResponse, org.eclipse.jetty.server.Response proxyToClientResponse, org.eclipse.jetty.util.Callback proxyToClientCallback, Throwable failure)
     
    protected void
    onServerToProxyResponse100Continue(org.eclipse.jetty.server.Request clientToProxyRequest, org.eclipse.jetty.client.Request proxyToServerRequest)
     
    protected void
    onServerToProxyResponse102Processing(org.eclipse.jetty.server.Request clientToProxyRequest, org.eclipse.jetty.client.Request proxyToServerRequest, org.eclipse.jetty.http.HttpFields serverToProxyResponseHeaders, org.eclipse.jetty.server.Response proxyToClientResponse)
     
    protected void
    onServerToProxyResponse103EarlyHints(org.eclipse.jetty.server.Request clientToProxyRequest, org.eclipse.jetty.client.Request proxyToServerRequest, org.eclipse.jetty.http.HttpFields serverToProxyResponseHeaders, org.eclipse.jetty.server.Response proxyToClientResponse)
     
    protected void
    onServerToProxyResponseFailure(org.eclipse.jetty.server.Request clientToProxyRequest, org.eclipse.jetty.client.Request proxyToServerRequest, org.eclipse.jetty.client.Response serverToProxyResponse, org.eclipse.jetty.server.Response proxyToClientResponse, org.eclipse.jetty.util.Callback proxyToClientCallback, Throwable failure)
     
    protected static String
    requestId(org.eclipse.jetty.server.Request clientToProxyRequest)
     
    protected abstract org.eclipse.jetty.http.HttpURI
    rewriteHttpURI(org.eclipse.jetty.server.Request clientToProxyRequest)
    Rewrites the client-to-proxy request URI to the proxy-to-server request URI.
    protected void
    sendProxyToServerRequest(org.eclipse.jetty.server.Request clientToProxyRequest, org.eclipse.jetty.client.Request proxyToServerRequest, org.eclipse.jetty.server.Response proxyToClientResponse, org.eclipse.jetty.util.Callback proxyToClientCallback)
     
    void
    setHttpClient(org.eclipse.jetty.client.HttpClient httpClient)
     
    void
    Sets the value to use for the Host header in proxy-to-server requests.
    void
    setViaHost(String viaHost)
    Sets the value to use for the Via header in proxy-to-server requests.

    Methods inherited from class org.eclipse.jetty.server.Handler.Abstract

    destroy, doStop, getInvocationType, getServer, setServer

    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
  • Constructor Details

    • ProxyHandler

      public ProxyHandler()
  • Method Details

    • getHttpClient

      public org.eclipse.jetty.client.HttpClient getHttpClient()
    • setHttpClient

      public void setHttpClient(org.eclipse.jetty.client.HttpClient httpClient)
    • getProxyToServerHost

      public String getProxyToServerHost()
      Get the proxy-to-server Host header value.
      Returns:
      the proxy-to-server Host header value
    • setProxyToServerHost

      public void setProxyToServerHost(String host)

      Sets the value to use for the Host header in proxy-to-server requests.

      If null, the client-to-proxy value is used.

      Parameters:
      host - the proxy-to-server Host header value
    • getViaHost

      public String getViaHost()
      Get the value to use for the Via header.
      Returns:
      the value to use for the Via header
    • setViaHost

      public void setViaHost(String viaHost)

      Sets the value to use for the Via header in proxy-to-server requests.

      If null, the local host name is used.

      Parameters:
      viaHost - the value to use for the Via header
    • doStart

      protected void doStart() throws Exception
      Overrides:
      doStart in class org.eclipse.jetty.server.Handler.Abstract
      Throws:
      Exception
    • newHttpClient

      protected org.eclipse.jetty.client.HttpClient newHttpClient()

      Creates a new HttpClient instance, by default with a thread pool named proxy-client and with the dynamic transport configured only with HTTP/1.1.

      Returns:
      a new HttpClient instance
    • configureHttpClient

      protected void configureHttpClient(org.eclipse.jetty.client.HttpClient httpClient)

      Configures the HttpClient instance before it is started.

      Parameters:
      httpClient - the HttpClient instance to configure
    • requestId

      protected static String requestId(org.eclipse.jetty.server.Request clientToProxyRequest)
    • handle

      public boolean handle(org.eclipse.jetty.server.Request clientToProxyRequest, org.eclipse.jetty.server.Response proxyToClientResponse, org.eclipse.jetty.util.Callback proxyToClientCallback)
    • rewriteHttpURI

      protected abstract org.eclipse.jetty.http.HttpURI rewriteHttpURI(org.eclipse.jetty.server.Request clientToProxyRequest)

      Rewrites the client-to-proxy request URI to the proxy-to-server request URI.

      Parameters:
      clientToProxyRequest - the client-to-proxy request
      Returns:
      an HttpURI for the proxy-to-server request
    • newProxyToServerRequest

      protected org.eclipse.jetty.client.Request newProxyToServerRequest(org.eclipse.jetty.server.Request clientToProxyRequest, org.eclipse.jetty.http.HttpURI newHttpURI)
    • copyRequestHeaders

      protected void copyRequestHeaders(org.eclipse.jetty.server.Request clientToProxyRequest, org.eclipse.jetty.client.Request proxyToServerRequest)
    • addProxyHeaders

      protected void addProxyHeaders(org.eclipse.jetty.server.Request clientToProxyRequest, org.eclipse.jetty.client.Request proxyToServerRequest)
    • addViaHeader

      protected void addViaHeader(org.eclipse.jetty.server.Request clientToProxyRequest, org.eclipse.jetty.client.Request proxyToServerRequest)
    • addForwardedHeader

      protected void addForwardedHeader(org.eclipse.jetty.server.Request clientToProxyRequest, org.eclipse.jetty.client.Request proxyToServerRequest)
    • newProxyToServerRequestContent

      protected org.eclipse.jetty.client.Request.Content newProxyToServerRequestContent(org.eclipse.jetty.server.Request clientToProxyRequest, org.eclipse.jetty.server.Response proxyToClientResponse, org.eclipse.jetty.client.Request proxyToServerRequest)
    • sendProxyToServerRequest

      protected void sendProxyToServerRequest(org.eclipse.jetty.server.Request clientToProxyRequest, org.eclipse.jetty.client.Request proxyToServerRequest, org.eclipse.jetty.server.Response proxyToClientResponse, org.eclipse.jetty.util.Callback proxyToClientCallback)
    • newServerToProxyResponseListener

      protected org.eclipse.jetty.client.Response.CompleteListener newServerToProxyResponseListener(org.eclipse.jetty.server.Request clientToProxyRequest, org.eclipse.jetty.client.Request proxyToServerRequest, org.eclipse.jetty.server.Response proxyToClientResponse, org.eclipse.jetty.util.Callback proxyToClientCallback)
    • filterServerToProxyResponseField

      protected org.eclipse.jetty.http.HttpField filterServerToProxyResponseField(org.eclipse.jetty.http.HttpField serverToProxyResponseField)
    • onServerToProxyResponseFailure

      protected void onServerToProxyResponseFailure(org.eclipse.jetty.server.Request clientToProxyRequest, org.eclipse.jetty.client.Request proxyToServerRequest, org.eclipse.jetty.client.Response serverToProxyResponse, org.eclipse.jetty.server.Response proxyToClientResponse, org.eclipse.jetty.util.Callback proxyToClientCallback, Throwable failure)
    • onServerToProxyResponse100Continue

      protected void onServerToProxyResponse100Continue(org.eclipse.jetty.server.Request clientToProxyRequest, org.eclipse.jetty.client.Request proxyToServerRequest)
    • onServerToProxyResponse102Processing

      protected void onServerToProxyResponse102Processing(org.eclipse.jetty.server.Request clientToProxyRequest, org.eclipse.jetty.client.Request proxyToServerRequest, org.eclipse.jetty.http.HttpFields serverToProxyResponseHeaders, org.eclipse.jetty.server.Response proxyToClientResponse)
    • onServerToProxyResponse103EarlyHints

      protected void onServerToProxyResponse103EarlyHints(org.eclipse.jetty.server.Request clientToProxyRequest, org.eclipse.jetty.client.Request proxyToServerRequest, org.eclipse.jetty.http.HttpFields serverToProxyResponseHeaders, org.eclipse.jetty.server.Response proxyToClientResponse)
    • onProxyToClientResponseComplete

      protected void onProxyToClientResponseComplete(org.eclipse.jetty.server.Request clientToProxyRequest, org.eclipse.jetty.client.Request proxyToServerRequest, org.eclipse.jetty.client.Response serverToProxyResponse, org.eclipse.jetty.server.Response proxyToClientResponse, org.eclipse.jetty.util.Callback proxyToClientCallback)
    • onProxyToClientResponseFailure

      protected void onProxyToClientResponseFailure(org.eclipse.jetty.server.Request clientToProxyRequest, org.eclipse.jetty.client.Request proxyToServerRequest, org.eclipse.jetty.client.Response serverToProxyResponse, org.eclipse.jetty.server.Response proxyToClientResponse, org.eclipse.jetty.util.Callback proxyToClientCallback, Throwable failure)