Updated Branches: refs/heads/wicket-1.5.x 2f20d06d4 -> bdfc0f959
WICKET-5131 Problems with cookies disabled when using 301/302 and also 303 (even with cookies) Project: http://git-wip-us.apache.org/repos/asf/wicket/repo Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/bdfc0f95 Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/bdfc0f95 Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/bdfc0f95 Branch: refs/heads/wicket-1.5.x Commit: bdfc0f95944f9a97ea23ca9532b088710cfdc804 Parents: 2f20d06 Author: Martin Tzvetanov Grigorov <[email protected]> Authored: Mon Apr 8 14:05:13 2013 +0300 Committer: Martin Tzvetanov Grigorov <[email protected]> Committed: Mon Apr 8 14:05:55 2013 +0300 ---------------------------------------------------------------------- .../http/handler/RedirectRequestHandler.java | 15 ++++++---- .../http/handler/RedirectRequestHandlerTest.java | 20 +++++++++++++++ 2 files changed, 29 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/wicket/blob/bdfc0f95/wicket-request/src/main/java/org/apache/wicket/request/http/handler/RedirectRequestHandler.java ---------------------------------------------------------------------- diff --git a/wicket-request/src/main/java/org/apache/wicket/request/http/handler/RedirectRequestHandler.java b/wicket-request/src/main/java/org/apache/wicket/request/http/handler/RedirectRequestHandler.java index e21856f..13c99fa 100644 --- a/wicket-request/src/main/java/org/apache/wicket/request/http/handler/RedirectRequestHandler.java +++ b/wicket-request/src/main/java/org/apache/wicket/request/http/handler/RedirectRequestHandler.java @@ -59,9 +59,10 @@ public class RedirectRequestHandler implements IRequestHandler public RedirectRequestHandler(final String redirectUrl, final int status) { if ((status != HttpServletResponse.SC_MOVED_PERMANENTLY) && - (status != HttpServletResponse.SC_MOVED_TEMPORARILY)) + (status != HttpServletResponse.SC_MOVED_TEMPORARILY) && + (status != HttpServletResponse.SC_SEE_OTHER)) { - throw new IllegalStateException("Status must be either 301 or 302, but was: " + status); + throw new IllegalStateException("Status must be either 301, 302 or 303, but was: " + status); } this.redirectUrl = redirectUrl; this.status = status; @@ -93,17 +94,19 @@ public class RedirectRequestHandler implements IRequestHandler { final String location; - if (redirectUrl.startsWith("/")) + final String url = getRedirectUrl(); + + if (url.charAt(0) == '/') { // context-absolute url - location = requestCycle.getUrlRenderer().renderContextRelativeUrl(redirectUrl); + location = requestCycle.getUrlRenderer().renderContextRelativeUrl(url); } else { // if relative url, servlet container will translate to absolute as // per the servlet spec // if absolute url still do the same - location = redirectUrl; + location = url; } WebResponse response = (WebResponse)requestCycle.getResponse(); @@ -114,7 +117,7 @@ public class RedirectRequestHandler implements IRequestHandler } else { - response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY); + response.setStatus(status); response.setHeader("Location", location); } } http://git-wip-us.apache.org/repos/asf/wicket/blob/bdfc0f95/wicket-request/src/test/java/org/apache/wicket/request/http/handler/RedirectRequestHandlerTest.java ---------------------------------------------------------------------- diff --git a/wicket-request/src/test/java/org/apache/wicket/request/http/handler/RedirectRequestHandlerTest.java b/wicket-request/src/test/java/org/apache/wicket/request/http/handler/RedirectRequestHandlerTest.java index 3e76a1f..d6239dc 100644 --- a/wicket-request/src/test/java/org/apache/wicket/request/http/handler/RedirectRequestHandlerTest.java +++ b/wicket-request/src/test/java/org/apache/wicket/request/http/handler/RedirectRequestHandlerTest.java @@ -69,4 +69,24 @@ public class RedirectRequestHandlerTest Mockito.verify(webResponse).sendRedirect(REDIRECT_URL); } + + /** + * https://issues.apache.org/jira/browse/WICKET-5131 + */ + @Test + public void seeOtherShouldSetLocationHeader() + { + RedirectRequestHandler handler = new RedirectRequestHandler(REDIRECT_URL, + HttpServletResponse.SC_SEE_OTHER); + + IRequestCycle requestCycle = Mockito.mock(IRequestCycle.class); + WebResponse webResponse = Mockito.mock(WebResponse.class); + + Mockito.when(requestCycle.getResponse()).thenReturn(webResponse); + + handler.respond(requestCycle); + + Mockito.verify(webResponse).setStatus(HttpServletResponse.SC_SEE_OTHER); + Mockito.verify(webResponse).setHeader("Location", REDIRECT_URL); + } }
