You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2013/01/08 21:24:10 UTC
svn commit: r1430487 - in /tomcat/trunk:
java/org/apache/catalina/filters/RemoteIpFilter.java
test/org/apache/catalina/filters/TestRemoteIpFilter.java
test/org/apache/catalina/valves/TestRemoteIpValve.java
Author: markt
Date: Tue Jan 8 20:24:10 2013
New Revision: 1430487
URL: http://svn.apache.org/viewvc?rev=1430487&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/trunk/java/org/apache/catalina/filters/RemoteIpFilter.java
tomcat/trunk/test/org/apache/catalina/filters/TestRemoteIpFilter.java
tomcat/trunk/test/org/apache/catalina/valves/TestRemoteIpValve.java
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=1430487&r1=1430486&r2=1430487&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/filters/RemoteIpFilter.java (original)
+++ tomcat/trunk/java/org/apache/catalina/filters/RemoteIpFilter.java Tue Jan 8 20:24:10 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/trunk/test/org/apache/catalina/filters/TestRemoteIpFilter.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/filters/TestRemoteIpFilter.java?rev=1430487&r1=1430486&r2=1430487&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/filters/TestRemoteIpFilter.java (original)
+++ tomcat/trunk/test/org/apache/catalina/filters/TestRemoteIpFilter.java Tue Jan 8 20:24:10 2013
@@ -44,6 +44,7 @@ import static org.junit.Assert.assertNul
import org.junit.Assert;
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;
@@ -126,7 +127,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);
}
}
@@ -502,6 +508,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/trunk/test/org/apache/catalina/valves/TestRemoteIpValve.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/valves/TestRemoteIpValve.java?rev=1430487&r1=1430486&r2=1430487&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/valves/TestRemoteIpValve.java (original)
+++ tomcat/trunk/test/org/apache/catalina/valves/TestRemoteIpValve.java Tue Jan 8 20:24:10 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);
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org