Class GenericProxyHandler

  • All Implemented Interfaces:
    Handler
    Direct Known Subclasses:
    MultiProxyHandler, ProxyPropertiesHandler

    public class GenericProxyHandler
    extends java.lang.Object
    implements Handler
    Handler for implementing a virtual web site. This causes another web site to "appear" inside our document root. This classes is intended to be sub-classed, so some of the methods in this implementation don't do too much. All of the appropriate links in HTML documents on the virtual site are rewritten, so they appear to be local references. This can be used on a firewall in conjunction with AclSwitchHandler to provide authenticated access to selected web sites.

    Properties:

    prefix
    URL prefix must match
    host
    name of host site to proxy to.
    port
    Host port to proxy to (defaults to 80).
    proxyHost
    Which proxy host to use (if any) to contact "host".
    proxyPort
    The proxy's port (defaults to 80)
    headers
    A list of white space delimited tokens that refer to additional HTTP headers that are added onto the polled request. For each token the server properties [token].name and [token].value define a new http header.
    passHost
    If true, the original browser host string is passed to the target, otherwise the mapped hostname is used, in which case the http header "X-Host-Orig" will contain the original host name.
    noErrorReturn
    If true, then if the proxy request fails, the response method returns "false", and places the reason for failure in the "errorCode" and "errorMsg" request properties. Otherwise, and error response is generated. The default is (erroneously) false for historical reasons.
    Version:
    2.5, 07/03/21
    Author:
    Stephen Uhler
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected java.lang.String host  
      static java.lang.String HOST
      Handler configuration property host.
      protected MapPage mapper  
      static java.lang.String NL  
      protected boolean noErrorReturn  
      protected boolean passHost  
      protected int port  
      static java.lang.String PORT
      Handler configuration property port.
      protected java.lang.String prefix  
      static java.lang.String PREFIX
      Handler configuration property prefix.
      static java.lang.String PROXY_HOST
      Handler configuration property proxyHost.
      static java.lang.String PROXY_PORT
      Handler configuration property proxyPort.
      protected java.lang.String proxyHost  
      protected int proxyPort  
      protected java.lang.String requestPrefix  
      protected java.lang.String tokens  
      protected java.lang.String urlPrefix  
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      MapPage getMapper()
      Return a reference to our page mapper, to allow futzing with the page maps from the outside
      boolean init​(Server server, java.lang.String prefix)
      Do one-time setup.
      boolean isMine​(Request request)
      See if this is one of my requests.
      byte[] modifyContent​(Request request, byte[] content)
      Rewrite the links in an html file so they resolve correctly in proxy mode.
      boolean respond​(Request request)
      If this is one of "our" url's, fetch the document from the destination server, and return it as if it was local.
      protected boolean shouldFilter​(MimeHeaders headers)
      See if the content needs to be filtered.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • prefix

        protected java.lang.String prefix
      • host

        protected java.lang.String host
      • port

        protected int port
      • proxyHost

        protected java.lang.String proxyHost
      • proxyPort

        protected int proxyPort
      • urlPrefix

        protected java.lang.String urlPrefix
      • requestPrefix

        protected java.lang.String requestPrefix
      • tokens

        protected java.lang.String tokens
      • passHost

        protected boolean passHost
      • noErrorReturn

        protected boolean noErrorReturn
      • PREFIX

        public static final java.lang.String PREFIX
        Handler configuration property prefix. Only URL's that begin with this string are considered by this handler. The default is (/).
        See Also:
        Constant Field Values
      • HOST

        public static final java.lang.String HOST
        Handler configuration property host. The actual host site to appear on our site (required)
        See Also:
        Constant Field Values
      • PORT

        public static final java.lang.String PORT
        Handler configuration property port. The actual port on the host site (defaults to 80).
        See Also:
        Constant Field Values
      • PROXY_HOST

        public static final java.lang.String PROXY_HOST
        Handler configuration property proxyHost. The name of a proxy to use (if any) to get to the host.
        See Also:
        Constant Field Values
      • PROXY_PORT

        public static final java.lang.String PROXY_PORT
        Handler configuration property proxyPort. The proxy port to use to get to the host. defaults to 80.
        See Also:
        Constant Field Values
    • Constructor Detail

      • GenericProxyHandler

        public GenericProxyHandler()
    • Method Detail

      • init

        public boolean init​(Server server,
                            java.lang.String prefix)
        Do one-time setup. get and process the handler properties. we can contact the server identified by the host parameter.
        Specified by:
        init in interface Handler
        Parameters:
        server - The HTTP server that created this Handler. Typical Handlers will use Server.props to obtain run-time configuration information.
        prefix - The handlers name. The string this Handler may prepend to all of the keys that it uses to extract configuration information from Server.props. This is set (by the Server and ChainHandler) to help avoid configuration parameter namespace collisions.
        Returns:
        true if this Handler initialized successfully, false otherwise. If false is returned, this Handler should not be used.
      • respond

        public boolean respond​(Request request)
                        throws java.io.IOException
        If this is one of "our" url's, fetch the document from the destination server, and return it as if it was local.
        Specified by:
        respond in interface Handler
        Parameters:
        request - The Request object that represents the HTTP request.
        Returns:
        true if the request was handled. A request was handled if a response was supplied to the client, typically by calling Request.sendResponse() or Request.sendError.
        Throws:
        java.io.IOException - if there was an I/O error while sending the response to the client. Typically, in that case, the Server will (try to) send an error message to the client and then close the client's connection.

        The IOException should not be used to silently ignore problems such as being unable to access some server-side resource (for example getting a FileNotFoundException due to not being able to open a file). In that case, the Handler's duty is to turn that IOException into a HTTP response indicating, in this case, that a file could not be found.

      • shouldFilter

        protected boolean shouldFilter​(MimeHeaders headers)
        See if the content needs to be filtered. Return "true" if "modifyContent" should be called
        Parameters:
        headers - Vector of mime headers for data to proxy
      • isMine

        public boolean isMine​(Request request)
        See if this is one of my requests. This method can be overridden to do more sophisticated mappings.
        Parameters:
        request - The standard request object
      • getMapper

        public MapPage getMapper()
        Return a reference to our page mapper, to allow futzing with the page maps from the outside
      • modifyContent

        public byte[] modifyContent​(Request request,
                                    byte[] content)
        Rewrite the links in an html file so they resolve correctly in proxy mode.
        Parameters:
        request - The original request to this "proxy"
        headers - The vector of mime headers for the proxy request
        Returns:
        true if the headers and content should be sent to the client, false otherwise Modifies "headers" as a side effect