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 <[email protected]>
Authored: Tue Jul 17 04:40:09 2012 -0300
Committer: Pedro Santos <[email protected]>
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

Reply via email to