Author: markt Date: Mon Jan 20 14:06:01 2014 New Revision: 1559699 URL: http://svn.apache.org/r1559699 Log: Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=55956 Make the forwarded remote IP available on the Manager status page
Modified: tomcat/tc7.0.x/trunk/ (props changed) tomcat/tc7.0.x/trunk/java/org/apache/catalina/Globals.java tomcat/tc7.0.x/trunk/java/org/apache/catalina/filters/RemoteIpFilter.java tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/StatusTransformer.java tomcat/tc7.0.x/trunk/java/org/apache/catalina/valves/RemoteIpValve.java tomcat/tc7.0.x/trunk/java/org/apache/coyote/Constants.java tomcat/tc7.0.x/trunk/java/org/apache/coyote/RequestInfo.java tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml tomcat/tc7.0.x/trunk/webapps/docs/config/filter.xml tomcat/tc7.0.x/trunk/webapps/docs/config/valve.xml Propchange: tomcat/tc7.0.x/trunk/ ------------------------------------------------------------------------------ Merged /tomcat/trunk:r1559697 Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/Globals.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/Globals.java?rev=1559699&r1=1559698&r2=1559699&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/catalina/Globals.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/Globals.java Mon Jan 20 14:06:01 2014 @@ -258,6 +258,19 @@ public final class Globals { /** + * The request attribute set by the RemoteIpFilter, RemoteIpValve (and may + * be set by other similar components) that identifies for the connector the + * remote IP address claimed to be associated with this request when a + * request is received via one or more proxies. It is typically provided via + * the X-Forwarded-For HTTP header. + * + * Duplicated here for neater code in the catalina packages. + */ + public static final String REMOTE_ADDR_ATTRIBUTE = + org.apache.coyote.Constants.REMOTE_ADDR_ATTRIBUTE; + + + /** * */ public static final String ASYNC_SUPPORTED_ATTR = Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/filters/RemoteIpFilter.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/filters/RemoteIpFilter.java?rev=1559699&r1=1559698&r2=1559699&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/catalina/filters/RemoteIpFilter.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/filters/RemoteIpFilter.java Mon Jan 20 14:06:01 2014 @@ -42,6 +42,7 @@ import javax.servlet.http.HttpServletReq import javax.servlet.http.HttpServletResponse; import org.apache.catalina.AccessLog; +import org.apache.catalina.Globals; import org.apache.juli.logging.Log; import org.apache.juli.logging.LogFactory; @@ -821,6 +822,8 @@ public class RemoteIpFilter implements F if (requestAttributesEnabled) { request.setAttribute(AccessLog.REMOTE_ADDR_ATTRIBUTE, xRequest.getRemoteAddr()); + request.setAttribute(Globals.REMOTE_ADDR_ATTRIBUTE, + xRequest.getRemoteAddr()); request.setAttribute(AccessLog.REMOTE_HOST_ATTRIBUTE, xRequest.getRemoteHost()); request.setAttribute(AccessLog.PROTOCOL_ATTRIBUTE, @@ -1108,6 +1111,7 @@ public class RemoteIpFilter implements F * <li>org.apache.catalina.AccessLog.RemoteHost</li> * <li>org.apache.catalina.AccessLog.Protocol</li> * <li>org.apache.catalina.AccessLog.ServerPort</li> + * <li>org.apache.tomcat.remoteAddr</li> * </ul> * * @param requestAttributesEnabled <code>true</code> causes the attributes Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/StatusTransformer.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/StatusTransformer.java?rev=1559699&r1=1559698&r2=1559699&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/StatusTransformer.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/manager/StatusTransformer.java Mon Jan 20 14:06:01 2014 @@ -337,7 +337,7 @@ public class StatusTransformer { (grpName, "bytesSent"), true)); writer.print("</p>"); - writer.print("<table border=\"0\"><tr><th>Stage</th><th>Time</th><th>B Sent</th><th>B Recv</th><th>Client</th><th>VHost</th><th>Request</th></tr>"); + writer.print("<table border=\"0\"><tr><th>Stage</th><th>Time</th><th>B Sent</th><th>B Recv</th><th>Client (Forwarded)</th><th>Client (Actual)</th><th>VHost</th><th>Request</th></tr>"); enumeration = requestProcessors.elements(); while (enumeration.hasMoreElements()) { @@ -486,6 +486,10 @@ public class StatusTransformer { writer.write("</td>"); writer.write("<td>"); writer.print(filter(mBeanServer.getAttribute + (pName, "remoteAddrForwarded"))); + writer.write("</td>"); + writer.write("<td>"); + writer.print(filter(mBeanServer.getAttribute (pName, "remoteAddr"))); writer.write("</td>"); writer.write("<td nowrap>"); Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/valves/RemoteIpValve.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/valves/RemoteIpValve.java?rev=1559699&r1=1559698&r2=1559699&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/catalina/valves/RemoteIpValve.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/valves/RemoteIpValve.java Mon Jan 20 14:06:01 2014 @@ -26,6 +26,7 @@ import java.util.regex.Pattern; import javax.servlet.ServletException; import org.apache.catalina.AccessLog; +import org.apache.catalina.Globals; import org.apache.catalina.connector.Request; import org.apache.catalina.connector.Response; import org.apache.juli.logging.Log; @@ -669,6 +670,8 @@ public class RemoteIpValve extends Valve if (requestAttributesEnabled) { request.setAttribute(AccessLog.REMOTE_ADDR_ATTRIBUTE, request.getRemoteAddr()); + request.setAttribute(Globals.REMOTE_ADDR_ATTRIBUTE, + request.getRemoteAddr()); request.setAttribute(AccessLog.REMOTE_HOST_ATTRIBUTE, request.getRemoteHost()); request.setAttribute(AccessLog.PROTOCOL_ATTRIBUTE, @@ -827,6 +830,7 @@ public class RemoteIpValve extends Valve * <li>org.apache.catalina.AccessLog.RemoteHost</li> * <li>org.apache.catalina.AccessLog.Protocol</li> * <li>org.apache.catalina.AccessLog.ServerPort</li> + * <li>org.apache.tomcat.remoteAddr</li> * </ul> * * @param requestAttributesEnabled <code>true</code> causes the attributes Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/Constants.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/Constants.java?rev=1559699&r1=1559698&r2=1559699&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/coyote/Constants.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/Constants.java Mon Jan 20 14:06:01 2014 @@ -128,4 +128,15 @@ public final class Constants { */ public static final String SENDFILE_FILE_END_ATTR = "org.apache.tomcat.sendfile.end"; + + + /** + * The request attribute set by the RemoteIpFilter, RemoteIpValve (and may + * be set by other similar components) that identifies for the connector the + * remote IP address claimed to be associated with this request when a + * request is received via one or more proxies. It is typically provided via + * the X-Forwarded-For HTTP header. + */ + public static final String REMOTE_ADDR_ATTRIBUTE = + "org.apache.tomcat.remoteAddr"; } Modified: tomcat/tc7.0.x/trunk/java/org/apache/coyote/RequestInfo.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/RequestInfo.java?rev=1559699&r1=1559698&r2=1559699&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/coyote/RequestInfo.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/RequestInfo.java Mon Jan 20 14:06:01 2014 @@ -98,6 +98,18 @@ public class RequestInfo { return req.remoteAddr().toString(); } + /** + * Obtain the remote address for this connection as reported by an + * intermediate proxy (if any). + */ + public String getRemoteAddrForwarded() { + String remoteAddrProxy = (String) req.getAttribute(Constants.REMOTE_ADDR_ATTRIBUTE); + if (remoteAddrProxy == null) { + return getRemoteAddr(); + } + return remoteAddrProxy; + } + public int getContentLength() { return req.getContentLength(); } Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1559699&r1=1559698&r2=1559699&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original) +++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Mon Jan 20 14:06:01 2014 @@ -117,6 +117,10 @@ set. (markt) </fix> <fix> + <bug>55956</bug>: Make the forwarded remote IP address available to the + Connectors via a request attribute. (markt) + </fix> + <fix> <bug>55976</bug>: Fix sendfile support for the HTTP NIO connector. (markt) </fix> @@ -185,6 +189,11 @@ <bug>55888</bug>: Update the documentation web application to make it clearer that a Container may define no more than one Realm. (markt) </fix> + <fix> + <bug>55956</bug>: Where available, displayed the forwarded remote IP + address available on the status page of the Manager web application. + (markt) + </fix> </changelog> </subsection> <subsection name="Other"> Modified: tomcat/tc7.0.x/trunk/webapps/docs/config/filter.xml URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/config/filter.xml?rev=1559699&r1=1559698&r2=1559699&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/webapps/docs/config/filter.xml (original) +++ tomcat/tc7.0.x/trunk/webapps/docs/config/filter.xml Mon Jan 20 14:06:01 2014 @@ -914,6 +914,7 @@ FINE: Request "/docs/config/manager.html <li><code>org.apache.catalina.AccessLog.RemoteHost</code></li> <li><code>org.apache.catalina.AccessLog.Protocol</code></li> <li><code>org.apache.catalina.AccessLog.ServerPort</code></li> + <li><code>org.apache.tomcat.remoteAddr</code></li> </ul> </subsection> @@ -1250,6 +1251,8 @@ FINE: Request "/docs/config/manager.html <p>Set to <code>true</code> to set the request attributes used by AccessLog implementations to override the values returned by the request for remote address, remote host, server port and protocol. + Request attributes are also used to enable the forwarded remote address + to be displayed on the status page of the Manager web application. If not set, the default value of <code>true</code> will be used.</p> </attribute> Modified: tomcat/tc7.0.x/trunk/webapps/docs/config/valve.xml URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/config/valve.xml?rev=1559699&r1=1559698&r2=1559699&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/webapps/docs/config/valve.xml (original) +++ tomcat/tc7.0.x/trunk/webapps/docs/config/valve.xml Mon Jan 20 14:06:01 2014 @@ -1256,6 +1256,7 @@ <li><code>org.apache.catalina.AccessLog.RemoteHost</code></li> <li><code>org.apache.catalina.AccessLog.Protocol</code></li> <li><code>org.apache.catalina.AccessLog.ServerPort</code></li> + <li><code>org.apache.tomcat.remoteAddr</code></li> </ul> </subsection> @@ -1299,6 +1300,8 @@ <p>Set to <code>true</code> to set the request attributes used by AccessLog implementations to override the values returned by the request for remote address, remote host, server port and protocol. + Request attributes are also used to enable the forwarded remote address + to be displayed on the status page of the Manager web application. If not set, the default value of <code>true</code> will be used.</p> </attribute> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org