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