Author: markt
Date: Tue Jan 8 20:26:14 2013
New Revision: 1430489
URL: http://svn.apache.org/viewvc?rev=1430489&view=rev
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=54377
Correctly set request attributes for AccessLog in RemoteIpFilter
Patch by Violeta Georgieva
Modified:
tomcat/tc7.0.x/trunk/ (props changed)
tomcat/tc7.0.x/trunk/java/org/apache/catalina/filters/RemoteIpFilter.java
tomcat/tc7.0.x/trunk/test/org/apache/catalina/filters/TestRemoteIpFilter.java
tomcat/tc7.0.x/trunk/test/org/apache/catalina/valves/TestRemoteIpValve.java
tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
Propchange: tomcat/tc7.0.x/trunk/
------------------------------------------------------------------------------
Merged /tomcat/trunk:r1430487
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=1430489&r1=1430488&r2=1430489&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
Tue Jan 8 20:26:14 2013
@@ -820,13 +820,13 @@ public class RemoteIpFilter implements F
}
if (requestAttributesEnabled) {
request.setAttribute(AccessLog.REMOTE_ADDR_ATTRIBUTE,
- request.getRemoteAddr());
+ xRequest.getRemoteAddr());
request.setAttribute(AccessLog.REMOTE_HOST_ATTRIBUTE,
- request.getRemoteHost());
+ xRequest.getRemoteHost());
request.setAttribute(AccessLog.PROTOCOL_ATTRIBUTE,
- request.getProtocol());
+ xRequest.getProtocol());
request.setAttribute(AccessLog.SERVER_PORT_ATTRIBUTE,
- Integer.valueOf(request.getServerPort()));
+ Integer.valueOf(xRequest.getServerPort()));
}
chain.doFilter(xRequest, response);
} else {
Modified:
tomcat/tc7.0.x/trunk/test/org/apache/catalina/filters/TestRemoteIpFilter.java
URL:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/catalina/filters/TestRemoteIpFilter.java?rev=1430489&r1=1430488&r2=1430489&view=diff
==============================================================================
---
tomcat/tc7.0.x/trunk/test/org/apache/catalina/filters/TestRemoteIpFilter.java
(original)
+++
tomcat/tc7.0.x/trunk/test/org/apache/catalina/filters/TestRemoteIpFilter.java
Tue Jan 8 20:26:14 2013
@@ -45,6 +45,7 @@ import static org.junit.Assert.assertNul
import org.junit.Test;
+import org.apache.catalina.AccessLog;
import org.apache.catalina.Context;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.connector.Connector;
@@ -127,7 +128,12 @@ public class TestRemoteIpFilter extends
@Override
public void setAttribute(String name, Object value) {
- // NOOP. Prevents NPE during testing.
+ getCoyoteRequest().getAttributes().put(name, value);
+ }
+
+ @Override
+ public Object getAttribute(String name) {
+ return getCoyoteRequest().getAttributes().get(name);
}
}
@@ -503,6 +509,37 @@ public class TestRemoteIpFilter extends
return filterChain.getRequest();
}
+ @Test
+ public void testRequestAttributesForAccessLog() throws Exception {
+ // PREPARE
+ FilterDef filterDef = new FilterDef();
+ filterDef.addInitParameter("protocolHeader", "x-forwarded-proto");
+ filterDef.addInitParameter("remoteIpHeader", "x-my-forwarded-for");
+ filterDef.addInitParameter("httpServerPort", "8080");
+
+ MockHttpServletRequest request = new MockHttpServletRequest();
+ request.setRemoteAddr("192.168.0.10");
+ request.setHeader("x-my-forwarded-for", "140.211.11.130");
+ request.setHeader("x-forwarded-proto", "http");
+
+ // TEST
+ HttpServletRequest actualRequest =
+ testRemoteIpFilter(filterDef, request);
+
+ // VERIFY
+ Assert.assertEquals("org.apache.catalina.AccessLog.ServerPort",
+ Integer.valueOf(8080),
+ actualRequest.getAttribute(AccessLog.SERVER_PORT_ATTRIBUTE));
+
+ Assert.assertEquals("org.apache.catalina.AccessLog.RemoteAddr",
+ "140.211.11.130",
+ actualRequest.getAttribute(AccessLog.REMOTE_ADDR_ATTRIBUTE));
+
+ Assert.assertEquals("org.apache.catalina.AccessLog.RemoteHost",
+ "140.211.11.130",
+ actualRequest.getAttribute(AccessLog.REMOTE_HOST_ATTRIBUTE));
+ }
+
/**
* Test {@link RemoteIpFilter} in Tomcat standalone server
*/
Modified:
tomcat/tc7.0.x/trunk/test/org/apache/catalina/valves/TestRemoteIpValve.java
URL:
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/catalina/valves/TestRemoteIpValve.java?rev=1430489&r1=1430488&r2=1430489&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/test/org/apache/catalina/valves/TestRemoteIpValve.java
(original)
+++ tomcat/tc7.0.x/trunk/test/org/apache/catalina/valves/TestRemoteIpValve.java
Tue Jan 8 20:26:14 2013
@@ -30,8 +30,10 @@ import static org.junit.Assert.assertNot
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
+import org.junit.Assert;
import org.junit.Test;
+import org.apache.catalina.AccessLog;
import org.apache.catalina.connector.Request;
import org.apache.catalina.connector.Response;
@@ -80,7 +82,12 @@ public class TestRemoteIpValve {
public static class MockRequest extends Request {
@Override
public void setAttribute(String name, Object value) {
- // NOOP. Prevents NPE during testing.
+ getCoyoteRequest().getAttributes().put(name, value);
+ }
+
+ @Override
+ public Object getAttribute(String name) {
+ return getCoyoteRequest().getAttribute(name);
}
}
@@ -670,6 +677,43 @@ public class TestRemoteIpValve {
assertArrayEquals(expected, actual);
}
+ @Test
+ public void testRequestAttributesForAccessLog() throws Exception {
+
+ // PREPARE
+ RemoteIpValve remoteIpValve = new RemoteIpValve();
+ remoteIpValve.setRemoteIpHeader("x-forwarded-for");
+ remoteIpValve.setProtocolHeader("x-forwarded-proto");
+ RemoteAddrAndHostTrackerValve remoteAddrAndHostTrackerValve = new
RemoteAddrAndHostTrackerValve();
+ remoteIpValve.setNext(remoteAddrAndHostTrackerValve);
+
+ Request request = new MockRequest();
+ request.setCoyoteRequest(new org.apache.coyote.Request());
+ // client ip
+ request.setRemoteAddr("192.168.0.10");
+ request.setRemoteHost("192.168.0.10");
+
request.getCoyoteRequest().getMimeHeaders().addValue("x-forwarded-for").setString("140.211.11.130");
+ // protocol
+ request.setServerPort(8080);
+ request.getCoyoteRequest().scheme().setString("http");
+
+ // TEST
+ remoteIpValve.invoke(request, null);
+
+ // VERIFY
+ Assert.assertEquals("org.apache.catalina.AccessLog.ServerPort",
+ Integer.valueOf(8080),
+ request.getAttribute(AccessLog.SERVER_PORT_ATTRIBUTE));
+
+ Assert.assertEquals("org.apache.catalina.AccessLog.RemoteAddr",
+ "140.211.11.130",
+ request.getAttribute(AccessLog.REMOTE_ADDR_ATTRIBUTE));
+
+ Assert.assertEquals("org.apache.catalina.AccessLog.RemoteHost",
+ "140.211.11.130",
+ request.getAttribute(AccessLog.REMOTE_HOST_ATTRIBUTE));
+ }
+
private void assertArrayEquals(String[] expected, String[] actual) {
if (expected == null) {
assertNull(actual);
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=1430489&r1=1430488&r2=1430489&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Tue Jan 8 20:26:14 2013
@@ -110,6 +110,10 @@
Genova. (markt)
</fix>
<fix>
+ <bug>54377</bug>: Correctly set request attributes for AccessLog in
+ RemoteIpFilter. Patch by Violeta Georgieva. (markt)
+ </fix>
+ <fix>
<bug>54380</bug>: Do not try to register servlets or contexts into the
mapper too early (which just caused a warning to be logged). (kkolinko)
</fix>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]