You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by pa...@apache.org on 2021/03/05 14:57:06 UTC

[wicket] branch wicket-8.x updated (24c67b3 -> af6dfbd)

This is an automated email from the ASF dual-hosted git repository.

papegaaij pushed a change to branch wicket-8.x
in repository https://gitbox.apache.org/repos/asf/wicket.git.


    from 24c67b3  WICKET-6868 ajax submit allow trigger submit on form
     new c2da3ad  Do not try to resolve X-Forwarded-For header
     new af6dfbd  Cleanup code and updated tests for new getRemoteAddr behavior

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../protocol/http/request/WebClientInfo.java       | 45 ++-------------
 .../protocol/http/request/WebClientInfoTest.java   | 65 +---------------------
 2 files changed, 6 insertions(+), 104 deletions(-)


[wicket] 01/02: Do not try to resolve X-Forwarded-For header

Posted by pa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

papegaaij pushed a commit to branch wicket-8.x
in repository https://gitbox.apache.org/repos/asf/wicket.git

commit c2da3ade7f93abc5ec4c502401e9a6d639eb9331
Author: Emond Papegaaij <em...@topicus.nl>
AuthorDate: Fri Mar 5 13:28:15 2021 +0100

    Do not try to resolve X-Forwarded-For header
    
    The remote address is reported by HttpServletRequest. Configuration of
    this property is normally done via the application server. If this is
    somehow not possible, use XForwardedRequestWrapperFactory.
---
 .../protocol/http/request/WebClientInfo.java       | 40 +++-------------------
 1 file changed, 4 insertions(+), 36 deletions(-)

diff --git a/wicket-core/src/main/java/org/apache/wicket/protocol/http/request/WebClientInfo.java b/wicket-core/src/main/java/org/apache/wicket/protocol/http/request/WebClientInfo.java
index c00dc47..c7ce9ee 100644
--- a/wicket-core/src/main/java/org/apache/wicket/protocol/http/request/WebClientInfo.java
+++ b/wicket-core/src/main/java/org/apache/wicket/protocol/http/request/WebClientInfo.java
@@ -145,49 +145,17 @@ public class WebClientInfo extends ClientInfo
 	}
 
 	/**
-	 * When using ProxyPass, requestCycle().getHttpServletRequest(). getRemoteAddr() returns the IP
-	 * of the machine forwarding the request. In order to maintain the clients ip address, the
-	 * server places it in the <a
-	 * href="http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#x-headers">X-Forwarded-For</a>
-	 * Header.
-	 *
-	 * Proxies may also mask the original client IP with tokens like "hidden" or "unknown".
-	 * If so, the last proxy ip address is returned.
+	 * Returns the IP address from {@code HttpServletRequest.getRemoteAddr()}.
 	 *
 	 * @param requestCycle
 	 *            the request cycle
-	 * @return remoteAddr IP address of the client, using the X-Forwarded-For header and defaulting
-	 *         to: getHttpServletRequest().getRemoteAddr()
+	 * @return remoteAddr IP address of the client, using
+	 *         {@code getHttpServletRequest().getRemoteAddr()}
 	 */
 	protected String getRemoteAddr(RequestCycle requestCycle)
 	{
 		ServletWebRequest request = (ServletWebRequest)requestCycle.getRequest();
-		HttpServletRequest req = request.getContainerRequest();
-		String remoteAddr = request.getHeader("X-Forwarded-For");
-
-		if (remoteAddr != null)
-		{
-			if (remoteAddr.contains(","))
-			{
-				// sometimes the header is of form client ip,proxy 1 ip,proxy 2 ip,...,proxy n ip,
-				// we just want the client
-				remoteAddr = Strings.split(remoteAddr, ',')[0].trim();
-			}
-			try
-			{
-				// If ip4/6 address string handed over, simply does pattern validation.
-				InetAddress.getByName(remoteAddr);
-			}
-			catch (UnknownHostException e)
-			{
-				remoteAddr = req.getRemoteAddr();
-			}
-		}
-		else
-		{
-			remoteAddr = req.getRemoteAddr();
-		}
-		return remoteAddr;
+		return request.getContainerRequest().getRemoteAddr();
 	}
 
 	/**


[wicket] 02/02: Cleanup code and updated tests for new getRemoteAddr behavior

Posted by pa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

papegaaij pushed a commit to branch wicket-8.x
in repository https://gitbox.apache.org/repos/asf/wicket.git

commit af6dfbdff02b5f7e8a4e67d13893aa9866d211f0
Author: Emond Papegaaij <em...@topicus.nl>
AuthorDate: Fri Mar 5 14:02:39 2021 +0100

    Cleanup code and updated tests for new getRemoteAddr behavior
---
 .../protocol/http/request/WebClientInfo.java       |  5 --
 .../protocol/http/request/WebClientInfoTest.java   | 65 +---------------------
 2 files changed, 2 insertions(+), 68 deletions(-)

diff --git a/wicket-core/src/main/java/org/apache/wicket/protocol/http/request/WebClientInfo.java b/wicket-core/src/main/java/org/apache/wicket/protocol/http/request/WebClientInfo.java
index c7ce9ee..0127c5e 100644
--- a/wicket-core/src/main/java/org/apache/wicket/protocol/http/request/WebClientInfo.java
+++ b/wicket-core/src/main/java/org/apache/wicket/protocol/http/request/WebClientInfo.java
@@ -16,21 +16,16 @@
  */
 package org.apache.wicket.protocol.http.request;
 
-import java.net.InetAddress;
-import java.net.UnknownHostException;
 import java.util.Locale;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import javax.servlet.http.HttpServletRequest;
-
 import org.apache.wicket.core.request.ClientInfo;
 import org.apache.wicket.markup.html.pages.BrowserInfoPage;
 import org.apache.wicket.protocol.http.ClientProperties;
 import org.apache.wicket.protocol.http.servlet.ServletWebRequest;
 import org.apache.wicket.request.cycle.RequestCycle;
 import org.apache.wicket.util.string.StringValue;
-import org.apache.wicket.util.string.Strings;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
diff --git a/wicket-core/src/test/java/org/apache/wicket/protocol/http/request/WebClientInfoTest.java b/wicket-core/src/test/java/org/apache/wicket/protocol/http/request/WebClientInfoTest.java
index 10ed68d..de44888 100644
--- a/wicket-core/src/test/java/org/apache/wicket/protocol/http/request/WebClientInfoTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/protocol/http/request/WebClientInfoTest.java
@@ -32,9 +32,7 @@ import javax.servlet.http.HttpServletRequest;
 import org.apache.wicket.protocol.http.servlet.ServletWebRequest;
 import org.apache.wicket.request.cycle.RequestCycle;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
-import org.mockito.Mockito;
 
 /**
  * Tests the WebClientInfo class
@@ -885,39 +883,6 @@ public class WebClientInfoTest
 		}
 	}
 
-
-	/**
-	 * Test X-Forwarded-For ip address extraction.
-	 */
-	@Test
-	public void testExtractFromXForwardedForHeader()
-	{
-		String expected = "127.0.0.1";
-		when(webRequest.getHeader("X-Forwarded-For")).thenReturn(expected);
-		WebClientInfo clientInfo = new WebClientInfo(requestCycleMock, "No user agent");
-		String actual = clientInfo.getRemoteAddr(requestCycleMock);
-		assertThat(actual, is(equalTo(expected)));
-		Mockito.verifyZeroInteractions(servletRequest);
-	}
-
-	/**
-	 * Test X-Forwarded-For ip address extraction with fallback when no ip is contained.
-	 *
-	 * Note mgrigorov: this test could fail in network setups where unknown addresses, like "blah",
-	 * will resolve to some DNS service saying "'blah' domain is free. Buy it."
-	 */
-	@Test
-	@Ignore
-	public void testExtractFromContainerRequestUnknownXForwardedFor()
-	{
-		String expected = "10.17.37.8";
-		when(servletRequest.getRemoteAddr()).thenReturn(expected);
-		when(webRequest.getHeader("X-Forwarded-For")).thenReturn("unknown");
-		WebClientInfo clientInfo = new WebClientInfo(requestCycleMock, "No user agent");
-		String actual = clientInfo.getRemoteAddr(requestCycleMock);
-		assertThat(actual, is(equalTo(expected)));
-	}
-
 	/**
 	 * Test default ip address extraction for container request.
 	 */
@@ -925,37 +890,11 @@ public class WebClientInfoTest
 	public void testExtractFromContainerRequestNoXForwardedFor()
 	{
 		String expected = "10.17.37.8";
+		String invalid = "10.17.9.55";
 		when(servletRequest.getRemoteAddr()).thenReturn(expected);
+		when(webRequest.getHeader("X-Forwarded-For")).thenReturn(invalid);
 		WebClientInfo clientInfo = new WebClientInfo(requestCycleMock, "No user agent");
 		String actual = clientInfo.getRemoteAddr(requestCycleMock);
 		assertThat(actual, is(equalTo(expected)));
 	}
-
-	/**
-	 * Test X-Forwarded-For ip address extraction when proxy chain is given.
-	 */
-	@Test
-	public void testExtractFromXForwardedForHeaderChainedIps()
-	{
-		String expected = "10.17.37.156";
-		when(servletRequest.getRemoteAddr()).thenReturn("10.17.1.1");
-		when(webRequest.getHeader("X-Forwarded-For")).thenReturn(expected + ", 10.17.37.1");
-		WebClientInfo clientInfo = new WebClientInfo(requestCycleMock, "No user agent");
-		String actual = clientInfo.getRemoteAddr(requestCycleMock);
-		assertThat(actual, is(equalTo(expected)));
-	}
-
-	/**
-	 * Test X-Forwarded-For ipv6 address extraction.
-	 */
-	@Test
-	public void testExtractFromXForwardedForHeaderIPv6()
-	{
-		String expected = "2001:db8::1428:57";
-		when(webRequest.getHeader("X-Forwarded-For")).thenReturn("2001:db8::1428:57");
-		WebClientInfo clientInfo = new WebClientInfo(requestCycleMock, "No user agent");
-		String actual = clientInfo.getRemoteAddr(requestCycleMock);
-		assertThat(actual, is(equalTo(expected)));
-	}
-
 }