Author: mgrigorov
Date: Fri Dec 16 14:06:46 2011
New Revision: 1215133

URL: http://svn.apache.org/viewvc?rev=1215133&view=rev
Log:
WICKET-4251
Multipart Form and AjaxSubmitLink will result in invalid redirect after user 
session expires


Added:
    
wicket/branches/wicket-1.5.x/wicket-core/src/test/java/org/apache/wicket/RestartResponseAtInterceptPageExceptionInAjaxTest.java
Modified:
    
wicket/branches/wicket-1.5.x/wicket-core/src/main/java/org/apache/wicket/RestartResponseAtInterceptPageException.java

Modified: 
wicket/branches/wicket-1.5.x/wicket-core/src/main/java/org/apache/wicket/RestartResponseAtInterceptPageException.java
URL: 
http://svn.apache.org/viewvc/wicket/branches/wicket-1.5.x/wicket-core/src/main/java/org/apache/wicket/RestartResponseAtInterceptPageException.java?rev=1215133&r1=1215132&r2=1215133&view=diff
==============================================================================
--- 
wicket/branches/wicket-1.5.x/wicket-core/src/main/java/org/apache/wicket/RestartResponseAtInterceptPageException.java
 (original)
+++ 
wicket/branches/wicket-1.5.x/wicket-core/src/main/java/org/apache/wicket/RestartResponseAtInterceptPageException.java
 Fri Dec 16 14:06:46 2011
@@ -19,6 +19,7 @@ package org.apache.wicket;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
@@ -27,11 +28,13 @@ import org.apache.wicket.request.IReques
 import org.apache.wicket.request.IWritableRequestParameters;
 import org.apache.wicket.request.Request;
 import org.apache.wicket.request.Url;
+import org.apache.wicket.request.Url.QueryParameter;
 import org.apache.wicket.request.cycle.RequestCycle;
 import org.apache.wicket.request.flow.ResetResponseException;
 import org.apache.wicket.request.handler.PageProvider;
 import org.apache.wicket.request.handler.RenderPageRequestHandler;
 import 
org.apache.wicket.request.handler.RenderPageRequestHandler.RedirectPolicy;
+import org.apache.wicket.request.http.WebRequest;
 import org.apache.wicket.request.http.handler.RedirectRequestHandler;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.util.string.StringValue;
@@ -110,9 +113,27 @@ public class RestartResponseAtInterceptP
                        InterceptData data = new InterceptData();
                        Request request = RequestCycle.get().getRequest();
                        data.originalUrl = request.getOriginalUrl();
+                       Iterator<QueryParameter> itor = 
data.originalUrl.getQueryParameters().iterator();
+                       while (itor.hasNext())
+                       {
+                               QueryParameter parameter = itor.next();
+                               String parameterName = parameter.getName();
+                               if (WebRequest.PARAM_AJAX.equals(parameterName) 
||
+                                       
WebRequest.PARAM_AJAX_BASE_URL.equals(parameterName) ||
+                                       
WebRequest.PARAM_AJAX_REQUEST_ANTI_CACHE.equals(parameterName))
+                               {
+                                       itor.remove();
+                               }
+                       }
+
                        data.postParameters = new HashMap<String, 
List<StringValue>>();
                        for (String s : 
request.getPostParameters().getParameterNames())
                        {
+                               if (WebRequest.PARAM_AJAX.equals(s) || 
WebRequest.PARAM_AJAX_BASE_URL.equals(s) ||
+                                       
WebRequest.PARAM_AJAX_REQUEST_ANTI_CACHE.equals(s))
+                               {
+                                       continue;
+                               }
                                data.postParameters.put(s, new 
ArrayList<StringValue>(request.getPostParameters()
                                        .getParameterValues(s)));
                        }

Added: 
wicket/branches/wicket-1.5.x/wicket-core/src/test/java/org/apache/wicket/RestartResponseAtInterceptPageExceptionInAjaxTest.java
URL: 
http://svn.apache.org/viewvc/wicket/branches/wicket-1.5.x/wicket-core/src/test/java/org/apache/wicket/RestartResponseAtInterceptPageExceptionInAjaxTest.java?rev=1215133&view=auto
==============================================================================
--- 
wicket/branches/wicket-1.5.x/wicket-core/src/test/java/org/apache/wicket/RestartResponseAtInterceptPageExceptionInAjaxTest.java
 (added)
+++ 
wicket/branches/wicket-1.5.x/wicket-core/src/test/java/org/apache/wicket/RestartResponseAtInterceptPageExceptionInAjaxTest.java
 Fri Dec 16 14:06:46 2011
@@ -0,0 +1,75 @@
+package org.apache.wicket;
+
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.AjaxLink;
+import 
org.apache.wicket.authorization.strategies.page.AbstractPageAuthorizationStrategy;
+import org.apache.wicket.markup.IMarkupResourceStreamProvider;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.markup.html.pages.RedirectPage;
+import org.apache.wicket.mock.MockApplication;
+import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.request.Url;
+import org.apache.wicket.request.cycle.RequestCycle;
+import org.apache.wicket.request.http.WebRequest;
+import org.apache.wicket.request.mapper.parameter.PageParameters;
+import org.apache.wicket.util.resource.IResourceStream;
+import org.apache.wicket.util.resource.StringResourceStream;
+import org.apache.wicket.util.tester.DummyHomePage;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * https://issues.apache.org/jira/browse/WICKET-4251
+ *
+ * Tests that an intercepted Ajax request is continued in non-Ajax response
+ */
+public class RestartResponseAtInterceptPageExceptionInAjaxTest extends 
WicketTestCase
+{
+
+       @Override
+       protected WebApplication newApplication()
+       {
+               return new MockApplication() {
+                       @Override
+                       public Class<? extends Page> getHomePage()
+                       {
+                               return HomePage.class;
+                       }
+               };
+       }
+
+       public static class HomePage extends WebPage implements 
IMarkupResourceStreamProvider
+       {
+               public HomePage() 
+               {
+               // set the intercept data
+                       new 
RestartResponseAtInterceptPageException(DummyHomePage.class);
+               }
+
+               public IResourceStream getMarkupResourceStream(MarkupContainer 
container, Class<?> containerClass)
+               {
+                       return new 
StringResourceStream("<html><body></body></html>");
+               }
+       }
+
+       /**
+        * https://issues.apache.org/jira/browse/WICKET-4251
+        *
+        * Asserts that the special WebRequest#PARAM_AJAX parameter is no 
preserved neither in the intercept url nor
+        * in its post parameters
+        */
+       @Test
+       public void requestAPageInAjaxButReceiveItInNonAjaxResponse()
+       {
+               // issue ajax request
+               
tester.executeAjaxUrl(Url.parse("?"+WebRequest.PARAM_AJAX+"=true&"+WebRequest.PARAM_AJAX_BASE_URL+"=/"));
+
+               // verify that ajax request parameters are not saved
+               RestartResponseAtInterceptPageException.InterceptData data = 
RestartResponseAtInterceptPageException.InterceptData.get();
+               
assertNull(data.getOriginalUrl().getQueryParameter(WebRequest.PARAM_AJAX));
+               
assertNull(data.getOriginalUrl().getQueryParameter(WebRequest.PARAM_AJAX_BASE_URL));
+               assertNull(data.getPostParameters().get(WebRequest.PARAM_AJAX));
+               
assertNull(data.getPostParameters().get(WebRequest.PARAM_AJAX_BASE_URL));
+       }
+
+}


Reply via email to