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