sunlabs.brazil.handler

Class GenericProxyHandler

public class GenericProxyHandler extends 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 {@link 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
protected Stringhost
static StringHOST
Handler configuration property host.
protected MapPagemapper
protected booleannoErrorReturn
static StringNL
protected booleanpassHost
protected intport
protected Stringprefix
protected StringproxyHost
protected intproxyPort
static StringPORT
Handler configuration property port.
static StringPREFIX
Handler configuration property prefix.
static StringPROXY_HOST
Handler configuration property proxyHost.
static StringPROXY_PORT
Handler configuration property proxyPort.
protected StringrequestPrefix
protected Stringtokens
protected StringurlPrefix
Method Summary
MapPagegetMapper()
Return a reference to our page mapper, to allow futzing with the page maps from the outside
booleaninit(Server server, String prefix)
Do one-time setup. get and process the handler properties. we can contact the server identified by the host parameter.
booleanisMine(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.
booleanrespond(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 booleanshouldFilter(MimeHeaders headers)
See if the content needs to be filtered.

Field Detail

host

protected String host

HOST

public static final String HOST
Handler configuration property host. The actual host site to appear on our site (required)

mapper

protected MapPage mapper

noErrorReturn

protected boolean noErrorReturn

NL

public static final String NL

passHost

protected boolean passHost

port

protected int port

prefix

protected String prefix

proxyHost

protected String proxyHost

proxyPort

protected int proxyPort

PORT

public static final String PORT
Handler configuration property port. The actual port on the host site (defaults to 80).

PREFIX

public static final String PREFIX
Handler configuration property prefix. Only URL's that begin with this string are considered by this handler. The default is (/).

PROXY_HOST

public static final String PROXY_HOST
Handler configuration property proxyHost. The name of a proxy to use (if any) to get to the host.

PROXY_PORT

public static final String PROXY_PORT
Handler configuration property proxyPort. The proxy port to use to get to the host. defaults to 80.

requestPrefix

protected String requestPrefix

tokens

protected String tokens

urlPrefix

protected String urlPrefix

Method Detail

getMapper

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

init

public boolean init(Server server, String prefix)
Do one-time setup. get and process the handler properties. we can contact the server identified by the host parameter.

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

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

respond

public 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.

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