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 2012/04/10 12:33:25 UTC
[4/7] git commit: WICKET-4260 remove leading dot in sendRedirect()
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/925cae5c
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/925cae5c
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/925cae5c
Branch: refs/heads/sandbox/atmosphere
Commit: 925cae5c9aec60d64669591599243e435c7ded6a
Parents: 0cdc22a
Author: Sven Meier <sv...@apache.org>
Authored: Fri Apr 6 15:56:37 2012 +0200
Committer: Sven Meier <sv...@apache.org>
Committed: Fri Apr 6 15:56:37 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/925cae5c/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/925cae5c/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 4a7782c..af75d73 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;
/**
@@ -372,6 +374,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/925cae5c/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