Author: jdonnerstag
Date: Sun Jan 11 13:51:13 2009
New Revision: 733523

URL: http://svn.apache.org/viewvc?rev=733523&view=rev
Log:
fixed wicket-2013: Session doesn't get invalidated when using 
RestartResponseException

Added:
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/session/InvalidateSessionTest$MyPage.html
    
wicket/trunk/wicket/src/test/java/org/apache/wicket/session/InvalidateSessionTest.java
Modified:
    wicket/trunk/wicket/src/main/java/org/apache/wicket/RequestCycle.java
    wicket/trunk/wicket/src/main/java/org/apache/wicket/Session.java

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/RequestCycle.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/RequestCycle.java?rev=733523&r1=733522&r2=733523&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/RequestCycle.java 
(original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/RequestCycle.java Sun 
Jan 11 13:51:13 2009
@@ -1054,7 +1054,7 @@
         * 
         * <p>
         * Clean up the request cycle.
-     * </p>
+        * </p>
         */
        public void detach()
        {
@@ -1378,6 +1378,13 @@
                                        // stack
                                        response.reset();
                                        currentStep = RESPOND;
+
+                                       // wicket-2013: create a new session if 
invalidated
+                                       if (getSession().isSessionInvalidated())
+                                       {
+                                               session = null;
+                                               Session.unset();
+                                       }
                                }
                        }
                }
@@ -1412,6 +1419,8 @@
                        {
                                log.error("there was an error detaching the 
session", re);
                        }
+
+                       session = null;
                }
 
                if (isRedirect())

Modified: wicket/trunk/wicket/src/main/java/org/apache/wicket/Session.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/main/java/org/apache/wicket/Session.java?rev=733523&r1=733522&r2=733523&view=diff
==============================================================================
--- wicket/trunk/wicket/src/main/java/org/apache/wicket/Session.java (original)
+++ wicket/trunk/wicket/src/main/java/org/apache/wicket/Session.java Sun Jan 11 
13:51:13 2009
@@ -400,7 +400,9 @@
                // If there is no request cycle then this is not a normal 
request but for example a last
                // modified call.
                if (RequestCycle.get() == null)
+               {
                        return;
+               }
 
                ISessionStore store = getSessionStore();
                Request request = RequestCycle.get().getRequest();

Added: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/session/InvalidateSessionTest$MyPage.html
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/session/InvalidateSessionTest%24MyPage.html?rev=733523&view=auto
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/session/InvalidateSessionTest$MyPage.html
 (added)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/session/InvalidateSessionTest$MyPage.html
 Sun Jan 11 13:51:13 2009
@@ -0,0 +1,2 @@
+<html>
+</html>
\ No newline at end of file

Added: 
wicket/trunk/wicket/src/test/java/org/apache/wicket/session/InvalidateSessionTest.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket/src/test/java/org/apache/wicket/session/InvalidateSessionTest.java?rev=733523&view=auto
==============================================================================
--- 
wicket/trunk/wicket/src/test/java/org/apache/wicket/session/InvalidateSessionTest.java
 (added)
+++ 
wicket/trunk/wicket/src/test/java/org/apache/wicket/session/InvalidateSessionTest.java
 Sun Jan 11 13:51:13 2009
@@ -0,0 +1,124 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.session;
+
+import junit.framework.TestCase;
+
+import org.apache.wicket.Page;
+import org.apache.wicket.Request;
+import org.apache.wicket.Response;
+import org.apache.wicket.RestartResponseException;
+import org.apache.wicket.Session;
+import org.apache.wicket.markup.html.WebPage;
+import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.protocol.http.WebSession;
+import org.apache.wicket.util.tester.WicketTester;
+
+/**
+ * 
+ */
+public class InvalidateSessionTest extends TestCase
+{
+       /** */
+       public static class MyApp extends WebApplication
+       {
+               /**
+                * {...@inheritdoc}
+                */
+               @Override
+               public Class<? extends Page> getHomePage()
+               {
+                       return MyPage.class;
+               }
+
+               /**
+                * {...@inheritdoc}
+                */
+               @Override
+               public Session newSession(Request request, Response response)
+               {
+                       return new MySession(request);
+               }
+       }
+
+       /** */
+       public static class MySession extends WebSession
+       {
+               private static final long serialVersionUID = 1L;
+
+               private String name;
+
+               /**
+                * Construct.
+                * 
+                * @param request
+                */
+               public MySession(Request request)
+               {
+                       super(request);
+               }
+
+               public static MySession get()
+               {
+                       return (MySession)Session.get();
+               }
+
+               public void setName(String name)
+               {
+                       this.name = name;
+               }
+
+               public String getName()
+               {
+                       return name;
+               }
+       }
+
+       /**
+        * 
+        */
+       public static class MyPage extends WebPage
+       {
+               /**
+                * Construct.
+                */
+               public MyPage()
+               {
+                       boolean sessionInvalid = 
Session.get().isSessionInvalidated();
+
+                       MySession sess = MySession.get();
+                       if (sess.getName() != null)
+                       {
+                               Session.get().invalidateNow();
+                               throw new RestartResponseException(getClass());
+                               // throw new AbortException();
+                       }
+               }
+       }
+
+       /**
+        * 
+        */
+       public void test_1()
+       {
+               WicketTester wicket = new WicketTester(new MyApp());
+               wicket.processRequestCycle();
+
+               MySession.get().setName("foo");
+               wicket.processRequestCycle();
+       }
+}


Reply via email to