martedì, febbraio 20, 2007

Java Reverse Proxy

Ho trovato, e sto utilizzando con grande soddisfazione all'interno di un web container, un reverse proxy open source scritto in java:

http://j2ep.sourceforge.net

jEasy Extensible Proxy (j2ep) dipende da alcune librerie opensource:

commons-beanutils
commons-codec
commons-digester
commons-httpclient
commons-logging

Nel mio progetto mi e' stato utile per proxare delle richieste HTTP le cui response venivano chesciate dalla Cache Servlet Filter di OpenSymphonyCache.

Configurare j2p e' davvero semplice...

Come prima cosa e' necessario scrivere un file di configurazione xml con l'elenco degli host che andranno proxati, ed il path (dal context, escluso, in poi) che fa scattare la chiamata HTTP proxata; questo file lo chiameremo data.xml:

<?xml version="1.0" encoding="UTF-8"?>
<config>
<server className="net.sf.j2ep.servers.BaseServer" domainName="osnews.com">
<rule className="net.sf.j2ep.rules.DirectoryRule" directory="/feed" />
</server>
</config>

In questo caso l'host da proxare e' osnews.com, l'url che si desidera proxare e' http://osnews.com/files/recent.xml, e la chiamata al reverse proxy sara' questa:
http://myhost/mywebapp/feed/files/recent.xml.

Il reverse proxy viene configurato con una Servlet Filter nel web.xml (specificando il path del file di configurazione e l'url-pattern sul quale il filter deve scattare) in questo modo:

<filter>
<filter-name>ProxyFilter</filter-name>
<filter-class>net.sf.j2ep.ProxyFilter</filter-class>
<init-param>
<param-name>dataUrl</param-name>
<param-value>/WEB-INF/cfg/data.xml</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>ProxyFilter</filter-name>
<url-pattern>/feed/*</url-pattern>
</filter-mapping>

Nessun commento: