Author: markt Date: Mon Jan 20 14:02:45 2014 New Revision: 1559697 URL: http://svn.apache.org/r1559697 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/trunk/java/org/apache/catalina/Globals.java tomcat/trunk/java/org/apache/catalina/filters/RemoteIpFilter.java tomcat/trunk/java/org/apache/catalina/manager/StatusTransformer.java tomcat/trunk/java/org/apache/catalina/valves/RemoteIpValve.java tomcat/trunk/java/org/apache/coyote/Constants.java tomcat/trunk/java/org/apache/coyote/RequestInfo.java tomcat/trunk/webapps/docs/config/filter.xml tomcat/trunk/webapps/docs/config/valve.xml Modified: tomcat/trunk/java/org/apache/catalina/Globals.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/Globals.java?rev=1559697&r1=1559696&r2=1559697&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/Globals.java (original) +++ tomcat/trunk/java/org/apache/catalina/Globals.java Mon Jan 20 14:02:45 2014 @@ -221,6 +221,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/trunk/java/org/apache/catalina/filters/RemoteIpFilter.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/filters/RemoteIpFilter.java?rev=1559697&r1=1559696&r2=1559697&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/filters/RemoteIpFilter.java (original) +++ tomcat/trunk/java/org/apache/catalina/filters/RemoteIpFilter.java Mon Jan 20 14:02:45 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; @@ -827,6 +828,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, @@ -1114,6 +1117,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/trunk/java/org/apache/catalina/manager/StatusTransformer.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/manager/StatusTransformer.java?rev=1559697&r1=1559696&r2=1559697&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/manager/StatusTransformer.java (original) +++ tomcat/trunk/java/org/apache/catalina/manager/StatusTransformer.java Mon Jan 20 14:02:45 2014 @@ -336,7 +336,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()) { @@ -485,6 +485,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/trunk/java/org/apache/catalina/valves/RemoteIpValve.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/valves/RemoteIpValve.java?rev=1559697&r1=1559696&r2=1559697&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/valves/RemoteIpValve.java (original) +++ tomcat/trunk/java/org/apache/catalina/valves/RemoteIpValve.java Mon Jan 20 14:02:45 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; @@ -662,6 +663,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, @@ -820,6 +823,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/trunk/java/org/apache/coyote/Constants.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/Constants.java?rev=1559697&r1=1559696&r2=1559697&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/Constants.java (original) +++ tomcat/trunk/java/org/apache/coyote/Constants.java Mon Jan 20 14:02:45 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/trunk/java/org/apache/coyote/RequestInfo.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/RequestInfo.java?rev=1559697&r1=1559696&r2=1559697&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/coyote/RequestInfo.java (original) +++ tomcat/trunk/java/org/apache/coyote/RequestInfo.java Mon Jan 20 14:02:45 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/trunk/webapps/docs/config/filter.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/config/filter.xml?rev=1559697&r1=1559696&r2=1559697&view=diff ============================================================================== --- tomcat/trunk/webapps/docs/config/filter.xml (original) +++ tomcat/trunk/webapps/docs/config/filter.xml Mon Jan 20 14:02:45 2014 @@ -890,6 +890,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> @@ -1217,6 +1218,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/trunk/webapps/docs/config/valve.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/config/valve.xml?rev=1559697&r1=1559696&r2=1559697&view=diff ============================================================================== --- tomcat/trunk/webapps/docs/config/valve.xml (original) +++ tomcat/trunk/webapps/docs/config/valve.xml Mon Jan 20 14:02:45 2014 @@ -1268,6 +1268,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> @@ -1311,6 +1312,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