Package sunlabs.brazil.handler
Class GenericProxyHandler
- java.lang.Object
-
- sunlabs.brazil.handler.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 withAclSwitchHandler
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
-
Constructor Summary
Constructors Constructor Description GenericProxyHandler()
-
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 outsideboolean
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.
-
-
-
Field Detail
-
prefix
protected java.lang.String prefix
-
mapper
protected MapPage mapper
-
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
-
NL
public static final java.lang.String NL
- See Also:
- Constant Field Values
-
-
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 interfaceHandler
- Parameters:
server
- The HTTP server that created thisHandler
. TypicalHandler
s will useServer.props
to obtain run-time configuration information.prefix
- The handlers name. The string thisHandler
may prepend to all of the keys that it uses to extract configuration information fromServer.props
. This is set (by theServer
andChainHandler
) to help avoid configuration parameter namespace collisions.- Returns:
true
if thisHandler
initialized successfully,false
otherwise. Iffalse
is returned, thisHandler
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 interfaceHandler
- Parameters:
request
- TheRequest
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 callingRequest.sendResponse()
orRequest.sendError
.- Throws:
java.io.IOException
- if there was an I/O error while sending the response to the client. Typically, in that case, theServer
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 aFileNotFoundException
due to not being able to open a file). In that case, theHandler
's duty is to turn thatIOException
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
-
-