Then why was proxyPort and proxyName not done in a Valve or Filter? I
assumed that I should be following the same route that other, similar
requirements followed.

With regards to a Filter, what if I have 30 webapps, and each one needs
the correct request.getRemoteAddr? Could one map a filter globally over
all webapps in the same Tomcat?

Regards
Johan

On Fri, 2006-07-14 at 15:45 -0500, Filip Hanik - Dev Lists wrote:
> This is a question for the user list, it might be better for you to take 
> the inquiries there, and you shouldn't need to hack tomcat for something 
> like this.
> Simply create a filter, that wraps your HttpServletRequest in a 
> HttpServletRequestWrapper,
> 
> worst case you could create Valve that does it for you, either way, you 
> can avoid changing tomcat code.
> 
> Filip
> 
> Johan van den Berg wrote:
> > Hi
> >
> > I'm totally new to hacking Tomcat, so excuse if I'm not following the
> > proper procedure, but needed to do this for our site that has a Tomcat
> > behind Apache (mod_jk), that sits behind a reverse proxy load balancer.
> > The idea is basically to not use the TCP endpoint of Apache (which will
> > always point to the reverse proxy) to give the caller of
> > request.getRemoteAddr a valid IP, but rather retrieve it from a
> > configurable request header. In our case, we have hacked the Pound
> > loadbalancer to forward a request header called X-Pounded-For with each
> > request, and the value of this header is then used (if available) to
> > return the *real client IP to the caller of request.getRemoteAddr or
> > request.getRemoteHost.
> >
> > Extract from server.xml:
> >
> > <!-- Define an AJP 1.3 Connector on port 8009 -->
> > <Connector port="8009" proxyRemoteAddrHeader="X-Pounded-For"
> > enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />
> >
> >
> > Let me know if it is of any use to anyone else!
> >
> > Regards
> >
> >   
> > ------------------------------------------------------------------------
> >
> > Index: 
> > container/catalina/src/share/org/apache/catalina/connector/CoyoteAdapter.java
> > ===================================================================
> > --- 
> > container/catalina/src/share/org/apache/catalina/connector/CoyoteAdapter.java
> >    (revision 421580)
> > +++ 
> > container/catalina/src/share/org/apache/catalina/connector/CoyoteAdapter.java
> >    (working copy)
> > @@ -198,12 +198,23 @@
> >          // Override if the proxyPort/proxyHost are set 
> >          String proxyName = connector.getProxyName();
> >          int proxyPort = connector.getProxyPort();
> > +        String proxyRemoteAddrHeader = 
> > connector.getProxyRemoteAddrHeader();
> > +        
> >          if (proxyPort != 0) {
> >              req.setServerPort(proxyPort);
> >          }
> >          if (proxyName != null) {
> >              req.serverName().setString(proxyName);
> >          }
> > +        if (proxyRemoteAddrHeader != null) {
> > +           String remoteAddr = req.getHeader(proxyRemoteAddrHeader);
> > +           if (remoteAddr != null) {
> > +                req.remoteAddr().setString(remoteAddr);
> > +                req.remoteHost().setString(remoteAddr);
> > +                request.setRemoteAddr(remoteAddr);
> > +                request.setRemoteHost(remoteAddr);                 
> > +           }
> > +        }
> >  
> >          // URI decoding
> >          MessageBytes decodedURI = req.decodedURI();
> > Index: 
> > container/catalina/src/share/org/apache/catalina/connector/Connector.java
> > ===================================================================
> > --- 
> > container/catalina/src/share/org/apache/catalina/connector/Connector.java   
> >     (revision 421580)
> > +++ 
> > container/catalina/src/share/org/apache/catalina/connector/Connector.java   
> >     (working copy)
> > @@ -155,6 +155,14 @@
> >       * the port number specified by the <code>port</code> property is used.
> >       */
> >      protected int proxyPort = 0;
> > +    
> > +    
> > +    /**
> > +     * The request header that should be use to populate the request 
> > object's
> > +     * remoteAddr field. This is commonly used behind reverse proxy's that 
> > pass
> > +     * the real client IP via a request header, such as 
> > <code>X-Pounded-For</code>.
> > +     */
> > +    protected String proxyRemoteAddrHeader = null;
> >  
> >  
> >      /**
> > @@ -732,6 +740,27 @@
> >          setProperty("proxyPort", String.valueOf(proxyPort));
> >  
> >      }
> > +    
> > +    /**
> > +     * Return the proxy remote address header value for this Connector.
> > +     */
> > +    public String getProxyRemoteAddrHeader() {
> > +           
> > +           return (this.proxyRemoteAddrHeader);
> > +           
> > +    }
> > +    
> > +    /**
> > +     * Set the proxy remote address header value for this Connector.
> > +     * 
> > +     * @param proxyRemoteAddrHeader The new proxy remote address header 
> > value
> > +     */
> > +    public void setProxyRemoteAddrHeader(String proxyRemoteAddrHeader) {
> > +           
> > +           this.proxyRemoteAddrHeader = proxyRemoteAddrHeader;
> > +           setProperty("proxyRemoteAddrHeader", proxyRemoteAddrHeader);
> > +           
> > +    }
> >  
> >  
> >      /**
> >
> >   
> > ------------------------------------------------------------------------
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> > ------------------------------------------------------------------------
> >
> > No virus found in this incoming message.
> > Checked by AVG Free Edition.
> > Version: 7.1.394 / Virus Database: 268.10.0/388 - Release Date: 7/13/2006
> >   
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to