You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by sv...@apache.org on 2012/04/06 13:41:56 UTC

git commit: WICKET-4260 remove leading dot in sendRedirect()

Updated Branches:
  refs/heads/wicket-1.5.x c19a60713 -> b5f330360


WICKET-4260 remove leading dot in sendRedirect()


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/b5f33036
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/b5f33036
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/b5f33036

Branch: refs/heads/wicket-1.5.x
Commit: b5f3303608a48c19ae2fccea941694102bcd461c
Parents: c19a607
Author: Sven Meier <sv...@apache.org>
Authored: Fri Apr 6 13:41:23 2012 +0200
Committer: Sven Meier <sv...@apache.org>
Committed: Fri Apr 6 13:41:23 2012 +0200

----------------------------------------------------------------------
 .../protocol/http/servlet/ServletWebResponse.java  |    8 ++++++
 .../wicket/protocol/http/WicketFilterTest.java     |    9 +++++++
 .../http/servlet/ServletWebResponseTest.java       |   18 +++++++-------
 3 files changed, 26 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/b5f33036/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebResponse.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebResponse.java b/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebResponse.java
index 27b52b1..2296e34 100644
--- a/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebResponse.java
+++ b/wicket-core/src/main/java/org/apache/wicket/protocol/http/servlet/ServletWebResponse.java
@@ -227,6 +227,14 @@ public class ServletWebResponse extends WebResponse
 			}
 			else
 			{
+				if (url.startsWith("./"))
+				{
+					/*
+					 * WICKET-4260 Tomcat does not canonalize urls, which leads to problems with IE
+					 * when url is relative and starts with a dot
+					 */
+					url = url.substring(2);
+				}
 				httpServletResponse.sendRedirect(url);
 			}
 		}

http://git-wip-us.apache.org/repos/asf/wicket/blob/b5f33036/wicket-core/src/test/java/org/apache/wicket/protocol/http/WicketFilterTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/protocol/http/WicketFilterTest.java b/wicket-core/src/test/java/org/apache/wicket/protocol/http/WicketFilterTest.java
index 55f6690..1250682 100644
--- a/wicket-core/src/test/java/org/apache/wicket/protocol/http/WicketFilterTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/protocol/http/WicketFilterTest.java
@@ -62,6 +62,8 @@ import org.junit.Assert;
 import org.junit.Test;
 import org.mockito.Matchers;
 import org.mockito.Mockito;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
 import org.xml.sax.SAXException;
 
 /**
@@ -364,6 +366,13 @@ public class WicketFilterTest extends Assert
 			.thenReturn("/contextPath/servlet/wicket/bookmarkable/" + DummyHomePage.class.getName());
 		when(request.getContextPath()).thenReturn("/contextPath");
 		HttpServletResponse response = mock(HttpServletResponse.class);
+		when(response.encodeRedirectURL(Matchers.anyString())).thenAnswer(new Answer<String>()
+		{
+			public String answer(InvocationOnMock invocation) throws Throwable
+			{
+				return (String)invocation.getArguments()[0];
+			}
+		});
 		FilterChain chain = mock(FilterChain.class);
 
 		// execute 3 requests - 1 for bla.js, 1 for bla.css and 1 for bla.img

http://git-wip-us.apache.org/repos/asf/wicket/blob/b5f33036/wicket-core/src/test/java/org/apache/wicket/protocol/http/servlet/ServletWebResponseTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/protocol/http/servlet/ServletWebResponseTest.java b/wicket-core/src/test/java/org/apache/wicket/protocol/http/servlet/ServletWebResponseTest.java
index a51f283..81d149f 100644
--- a/wicket-core/src/test/java/org/apache/wicket/protocol/http/servlet/ServletWebResponseTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/protocol/http/servlet/ServletWebResponseTest.java
@@ -27,8 +27,6 @@ import java.io.StringWriter;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
-import org.apache.wicket.protocol.http.mock.MockHttpServletResponse;
-import org.apache.wicket.util.time.Time;
 import org.junit.Assert;
 import org.junit.Test;
 import org.mockito.Matchers;
@@ -49,7 +47,7 @@ public class ServletWebResponseTest extends Assert
 	@Test
 	public void sendRedirectAjax() throws IOException
 	{
-		final String url = "relative/path";
+		final String url = "./relative/path";
 
 		ServletWebRequest webRequest = mock(ServletWebRequest.class);
 		when(webRequest.isAjax()).thenReturn(Boolean.TRUE);
@@ -69,7 +67,7 @@ public class ServletWebResponseTest extends Assert
 		verify(httpServletResponse).addHeader("Ajax-Location", url);
 		verify(httpServletResponse).setContentType("text/xml;charset=UTF-8");
 		assertEquals(
-			"<ajax-response><redirect><![CDATA[relative/path]]></redirect></ajax-response>",
+			"<ajax-response><redirect><![CDATA[./relative/path]]></redirect></ajax-response>",
 			writer.toString());
 		assertTrue(webResponse.isRedirect());
 
@@ -81,12 +79,16 @@ public class ServletWebResponseTest extends Assert
 	 * Redirects in normal (non-Ajax) requests should call HttpServletResponse's sendRedirect()
 	 * which cares to make the url absolute
 	 * 
+	 * https://issues.apache.org/jira/browse/WICKET-4260
+	 * 
+	 * Redirect to relative url should be stripped of leading dot
+	 * 
 	 * @throws IOException
 	 */
 	@Test
 	public void sendRedirect() throws IOException
 	{
-		final String url = "relative/path";
+		final String url = "./relative/path";
 
 		ServletWebRequest webRequest = mock(ServletWebRequest.class);
 		when(webRequest.isAjax()).thenReturn(Boolean.FALSE);
@@ -97,9 +99,7 @@ public class ServletWebResponseTest extends Assert
 		ServletWebResponse webResponse = new ServletWebResponse(webRequest, httpServletResponse);
 		webResponse.sendRedirect(url);
 
-		verify(httpServletResponse).sendRedirect(url);
+		verify(httpServletResponse).sendRedirect("relative/path");
 		assertTrue(webResponse.isRedirect());
-
 	}
-
-}
+}
\ No newline at end of file