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);
+       }
 }

Reply via email to