You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by pe...@apache.org on 2012/07/17 09:42:02 UTC

git commit: WICKET-4659: preventing exceptional responses from being cached and overlay next requests replay on the same address

Updated Branches:
  refs/heads/master 0f9349b62 -> ccd746419


WICKET-4659: preventing exceptional responses from being cached and
overlay next requests replay on the same address

Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/ccd74641
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/ccd74641
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/ccd74641

Branch: refs/heads/master
Commit: ccd746419bd803e1b801aea0dd50d3b01b022ec4
Parents: 0f9349b
Author: Pedro Santos <pe...@apache.com>
Authored: Tue Jul 17 04:40:09 2012 -0300
Committer: Pedro Santos <pe...@apache.com>
Committed: Tue Jul 17 04:40:09 2012 -0300

----------------------------------------------------------------------
 .../org/apache/wicket/DefaultExceptionMapper.java  |   18 ++++++++++----
 .../apache/wicket/DefaultExceptionMapperTest.java  |   17 ++++++++++++++
 2 files changed, 30 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/ccd74641/wicket-core/src/main/java/org/apache/wicket/DefaultExceptionMapper.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/DefaultExceptionMapper.java b/wicket-core/src/main/java/org/apache/wicket/DefaultExceptionMapper.java
index 1a787ea..eea361d 100644
--- a/wicket-core/src/main/java/org/apache/wicket/DefaultExceptionMapper.java
+++ b/wicket-core/src/main/java/org/apache/wicket/DefaultExceptionMapper.java
@@ -17,21 +17,23 @@
 package org.apache.wicket;
 
 import org.apache.wicket.authorization.AuthorizationException;
+import org.apache.wicket.core.request.handler.IPageRequestHandler;
+import org.apache.wicket.core.request.handler.ListenerInvocationNotAllowedException;
+import org.apache.wicket.core.request.handler.PageProvider;
+import org.apache.wicket.core.request.handler.RenderPageRequestHandler;
+import org.apache.wicket.core.request.mapper.StalePageException;
 import org.apache.wicket.markup.html.pages.ExceptionErrorPage;
 import org.apache.wicket.protocol.http.PageExpiredException;
 import org.apache.wicket.protocol.http.servlet.ResponseIOException;
 import org.apache.wicket.request.IExceptionMapper;
 import org.apache.wicket.request.IRequestHandler;
 import org.apache.wicket.request.Request;
+import org.apache.wicket.request.Response;
 import org.apache.wicket.request.cycle.RequestCycle;
 import org.apache.wicket.request.handler.EmptyRequestHandler;
-import org.apache.wicket.core.request.handler.IPageRequestHandler;
-import org.apache.wicket.core.request.handler.ListenerInvocationNotAllowedException;
-import org.apache.wicket.core.request.handler.PageProvider;
-import org.apache.wicket.core.request.handler.RenderPageRequestHandler;
 import org.apache.wicket.request.http.WebRequest;
+import org.apache.wicket.request.http.WebResponse;
 import org.apache.wicket.request.http.handler.ErrorCodeRequestHandler;
-import org.apache.wicket.core.request.mapper.StalePageException;
 import org.apache.wicket.settings.IExceptionSettings;
 import org.apache.wicket.settings.IExceptionSettings.UnexpectedExceptionDisplay;
 import org.slf4j.Logger;
@@ -51,6 +53,12 @@ public class DefaultExceptionMapper implements IExceptionMapper
 	{
 		try
 		{
+			Response response = RequestCycle.get().getResponse();
+			if (response instanceof WebResponse)
+			{
+				// we don't wan't to cache an exceptional reply in the browser
+				((WebResponse)response).disableCaching();
+			}
 			return internalMap(e);
 		}
 		catch (RuntimeException e2)

http://git-wip-us.apache.org/repos/asf/wicket/blob/ccd74641/wicket-core/src/test/java/org/apache/wicket/DefaultExceptionMapperTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/DefaultExceptionMapperTest.java b/wicket-core/src/test/java/org/apache/wicket/DefaultExceptionMapperTest.java
index fb544cf..3e5dac5 100644
--- a/wicket-core/src/test/java/org/apache/wicket/DefaultExceptionMapperTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/DefaultExceptionMapperTest.java
@@ -16,6 +16,9 @@
  */
 package org.apache.wicket;
 
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+
 import javax.servlet.http.HttpServletResponse;
 
 import org.apache.wicket.markup.IMarkupResourceStreamProvider;
@@ -23,6 +26,7 @@ import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.mock.MockApplication;
 import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.request.http.WebResponse;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.settings.IExceptionSettings;
 import org.apache.wicket.util.resource.IResourceStream;
@@ -50,6 +54,19 @@ public class DefaultExceptionMapperTest extends WicketTestCase
 	}
 
 	/**
+	 * <a href="https://issues.apache.org/jira/browse/WICKET-4659">WICKET-4659</a>
+	 */
+	@Test
+	public void shouldDisableCaching()
+	{
+		WebResponse response = mock(WebResponse.class);
+		tester.getRequestCycle().setResponse(response);
+		new DefaultExceptionMapper().map(mock(Exception.class));
+		verify(response).disableCaching();
+		tester.destroy();
+	}
+
+	/**
 	 * <a href="https://issues.apache.org/jira/browse/WICKET-3520">WICKET-3520</a>
 	 */
 	@Test