org.mortbay.http.handler
Class ProxyHandler

java.lang.Object
  extended by org.mortbay.http.handler.AbstractHttpHandler
      extended by org.mortbay.http.handler.ProxyHandler
All Implemented Interfaces:
java.io.Serializable, HttpHandler, LifeCycle

public class ProxyHandler
extends AbstractHttpHandler

Proxy request handler. A HTTP/1.1 Proxy. This implementation uses the JVMs URL implementation to make proxy requests.

The HttpTunnel mechanism is also used to implement the CONNECT method.

Version:
$Id: ProxyHandler.java,v 1.34 2005/10/05 13:32:59 gregwilkins Exp $
Author:
Greg Wilkins (gregw), giacof@tiscali.it (chained proxy)
See Also:
Serialized Form

Field Summary
protected  java.util.HashSet _allowedConnectPorts
          Set of allowed CONNECT ports.
protected  StringMap _DontProxyHeaders
          Map of leg by leg headers (not end to end).
protected  StringMap _ProxyAuthHeaders
          Map of leg by leg headers (not end to end).
protected  java.util.Set _proxyHostsBlackList
           
protected  java.util.Set _proxyHostsWhiteList
           
protected  StringMap _ProxySchemes
          Map of allows schemes to proxy Should be a set, but more efficient string map is used instead.
protected  int _tunnelTimeoutMs
           
 
Constructor Summary
ProxyHandler()
           
 
Method Summary
protected  void customizeConnection(java.lang.String pathInContext, java.lang.String pathParams, HttpRequest request, java.net.Socket socket)
          Customize proxy Socket connection for CONNECT.
protected  void customizeConnection(java.lang.String pathInContext, java.lang.String pathParams, HttpRequest request, java.net.URLConnection connection)
          Customize proxy URL connection.
 java.lang.String[] getProxyHostsBlackList()
          Get proxy host black list.
 java.lang.String[] getProxyHostsWhiteList()
          Get proxy host white list.
 int getTunnelTimeoutMs()
           
 void handle(java.lang.String pathInContext, java.lang.String pathParams, HttpRequest request, HttpResponse response)
          Handle a request.
 void handleConnect(java.lang.String pathInContext, java.lang.String pathParams, HttpRequest request, HttpResponse response)
           
 boolean isAnonymous()
           
protected  boolean isForbidden(java.lang.String scheme, java.lang.String host, int port, boolean openNonPrivPorts)
          Is scheme,host & port Forbidden.
protected  boolean isForbidden(URI uri)
          Is URL Forbidden.
protected  java.net.URL isProxied(URI uri)
          Is URL Proxied.
protected  HttpTunnel newHttpTunnel(HttpRequest request, HttpResponse response, java.net.InetAddress iaddr, int port, int timeoutMS)
           
protected  void sendForbid(HttpRequest request, HttpResponse response, URI uri)
          Send Forbidden.
 void setAnonymous(boolean anonymous)
           
 void setProxyHostsBlackList(java.lang.String[] hosts)
          Set proxy host black list.
 void setProxyHostsWhiteList(java.lang.String[] hosts)
          Set proxy host white list.
 void setTunnelTimeoutMs(int ms)
          Tunnel timeout.
 void start()
          Start the LifeCycle.
 
Methods inherited from class org.mortbay.http.handler.AbstractHttpHandler
getHttpContext, getName, handleTrace, initialize, isStarted, setName, stop, toString
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

_proxyHostsWhiteList

protected java.util.Set _proxyHostsWhiteList

_proxyHostsBlackList

protected java.util.Set _proxyHostsBlackList

_tunnelTimeoutMs

protected int _tunnelTimeoutMs

_DontProxyHeaders

protected StringMap _DontProxyHeaders
Map of leg by leg headers (not end to end). Should be a set, but more efficient string map is used instead.


_ProxyAuthHeaders

protected StringMap _ProxyAuthHeaders
Map of leg by leg headers (not end to end). Should be a set, but more efficient string map is used instead.


_ProxySchemes

protected StringMap _ProxySchemes
Map of allows schemes to proxy Should be a set, but more efficient string map is used instead.


_allowedConnectPorts

protected java.util.HashSet _allowedConnectPorts
Set of allowed CONNECT ports.

Constructor Detail

ProxyHandler

public ProxyHandler()
Method Detail

start

public void start()
           throws java.lang.Exception
Description copied from interface: LifeCycle
Start the LifeCycle.

Specified by:
start in interface LifeCycle
Overrides:
start in class AbstractHttpHandler
Throws:
java.lang.Exception - An arbitrary exception may be thrown.

getProxyHostsWhiteList

public java.lang.String[] getProxyHostsWhiteList()
Get proxy host white list.

Returns:
Array of hostnames and IPs that are proxied, or an empty array if all hosts are proxied.

setProxyHostsWhiteList

public void setProxyHostsWhiteList(java.lang.String[] hosts)
Set proxy host white list.

Parameters:
hosts - Array of hostnames and IPs that are proxied, or null if all hosts are proxied.

getProxyHostsBlackList

public java.lang.String[] getProxyHostsBlackList()
Get proxy host black list.

Returns:
Array of hostnames and IPs that are NOT proxied.

setProxyHostsBlackList

public void setProxyHostsBlackList(java.lang.String[] hosts)
Set proxy host black list.

Parameters:
hosts - Array of hostnames and IPs that are NOT proxied.

getTunnelTimeoutMs

public int getTunnelTimeoutMs()

setTunnelTimeoutMs

public void setTunnelTimeoutMs(int ms)
Tunnel timeout. IE on win2000 has connections issues with normal timeout handling. This timeout should be set to a low value that will expire to allow IE to see the end of the tunnel connection.


handle

public void handle(java.lang.String pathInContext,
                   java.lang.String pathParams,
                   HttpRequest request,
                   HttpResponse response)
            throws HttpException,
                   java.io.IOException
Description copied from interface: HttpHandler
Handle a request. Note that Handlers are tried in order until one has handled the request. i.e. until request.isHandled() returns true. In broad terms this means, either a response has been commited or request.setHandled(true) has been called.

Parameters:
pathInContext - The context path
pathParams - Path parameters such as encoded Session ID
request - The HttpRequest request
response - The HttpResponse response
Throws:
HttpException
java.io.IOException

handleConnect

public void handleConnect(java.lang.String pathInContext,
                          java.lang.String pathParams,
                          HttpRequest request,
                          HttpResponse response)
                   throws HttpException,
                          java.io.IOException
Throws:
HttpException
java.io.IOException

newHttpTunnel

protected HttpTunnel newHttpTunnel(HttpRequest request,
                                   HttpResponse response,
                                   java.net.InetAddress iaddr,
                                   int port,
                                   int timeoutMS)
                            throws java.io.IOException
Throws:
java.io.IOException

customizeConnection

protected void customizeConnection(java.lang.String pathInContext,
                                   java.lang.String pathParams,
                                   HttpRequest request,
                                   java.net.Socket socket)
                            throws java.io.IOException
Customize proxy Socket connection for CONNECT. Method to allow derived handlers to customize the tunnel sockets.

Throws:
java.io.IOException

customizeConnection

protected void customizeConnection(java.lang.String pathInContext,
                                   java.lang.String pathParams,
                                   HttpRequest request,
                                   java.net.URLConnection connection)
                            throws java.io.IOException
Customize proxy URL connection. Method to allow derived handlers to customize the connection.

Throws:
java.io.IOException

isProxied

protected java.net.URL isProxied(URI uri)
                          throws java.net.MalformedURLException
Is URL Proxied. Method to allow derived handlers to select which URIs are proxied and to where.

Parameters:
uri - The requested URI, which should include a scheme, host and port.
Returns:
The URL to proxy to, or null if the passed URI should not be proxied. The default implementation returns the passed uri if isForbidden() returns true.
Throws:
java.net.MalformedURLException

isForbidden

protected boolean isForbidden(URI uri)
Is URL Forbidden.

Returns:
True if the URL is not forbidden. Calls isForbidden(scheme,host,port,true);

isForbidden

protected boolean isForbidden(java.lang.String scheme,
                              java.lang.String host,
                              int port,
                              boolean openNonPrivPorts)
Is scheme,host & port Forbidden.

Parameters:
scheme - A scheme that mast be in the proxySchemes StringMap.
host - A host that must pass the white and black lists
port - A port that must in the allowedConnectPorts Set
openNonPrivPorts - If true ports greater than 1024 are allowed.
Returns:
True if the request to the scheme,host and port is not forbidden.

sendForbid

protected void sendForbid(HttpRequest request,
                          HttpResponse response,
                          URI uri)
                   throws java.io.IOException
Send Forbidden. Method called to send forbidden response. Default implementation calls sendError(403)

Throws:
java.io.IOException

isAnonymous

public boolean isAnonymous()
Returns:
Returns the anonymous.

setAnonymous

public void setAnonymous(boolean anonymous)
Parameters:
anonymous - The anonymous to set.


Copyright © 2004 Mortbay Consulting Pty. Ltd. All Rights Reserved.