You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by pa...@apache.org on 2020/11/02 12:32:45 UTC

[wicket] branch wicket-8.x updated: WICKET-6848: Do not flush before detach when session needs invalidation

This is an automated email from the ASF dual-hosted git repository.

papegaaij pushed a commit to branch wicket-8.x
in repository https://gitbox.apache.org/repos/asf/wicket.git


The following commit(s) were added to refs/heads/wicket-8.x by this push:
     new 8150ad1  WICKET-6848: Do not flush before detach when session needs invalidation
8150ad1 is described below

commit 8150ad19cbb3b436f8e8aed32c766269811e6c62
Author: Emond Papegaaij <em...@topicus.nl>
AuthorDate: Mon Nov 2 13:25:18 2020 +0100

    WICKET-6848: Do not flush before detach when session needs invalidation
---
 .../src/main/java/org/apache/wicket/Session.java      | 19 ++++++++++++++++++-
 .../org/apache/wicket/protocol/http/WicketFilter.java |  9 ++++++++-
 2 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/wicket-core/src/main/java/org/apache/wicket/Session.java b/wicket-core/src/main/java/org/apache/wicket/Session.java
index cdbffbf..066c2cb 100644
--- a/wicket-core/src/main/java/org/apache/wicket/Session.java
+++ b/wicket-core/src/main/java/org/apache/wicket/Session.java
@@ -551,7 +551,24 @@ public abstract class Session implements IClusterable, IEventSink, IFeedbackCont
 	 */
 	public final boolean isSessionInvalidated()
 	{
-		return Boolean.TRUE.equals(RequestCycle.get().getMetaData(SESSION_INVALIDATED));
+		RequestCycle requestCycle = RequestCycle.get();
+		return isSessionInvalidated(requestCycle);
+	}
+
+	/**
+	 * Whether the session is invalid now, or will be invalidated by the end of the request. Clients
+	 * should rarely need to use this method if ever.
+	 * 
+	 * @param requestCycle
+	 *            The current request cycle
+	 * @return Whether the session is invalid when the current request is done
+	 * 
+	 * @see #invalidate()
+	 * @see #invalidateNow()
+	 */
+	public static boolean isSessionInvalidated(RequestCycle requestCycle)
+	{
+		return Boolean.TRUE.equals(requestCycle.getMetaData(SESSION_INVALIDATED));
 	}
 
 	/**
diff --git a/wicket-core/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java b/wicket-core/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java
index c53d0cd..5eb4fc6 100644
--- a/wicket-core/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java
+++ b/wicket-core/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java
@@ -31,6 +31,7 @@ import javax.servlet.annotation.WebServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.apache.wicket.Session;
 import org.apache.wicket.ThreadContext;
 import org.apache.wicket.WicketRuntimeException;
 import org.apache.wicket.protocol.http.servlet.ResponseIOException;
@@ -270,11 +271,13 @@ public class WicketFilter implements Filter
 		final FilterChain chain) throws IOException, ServletException
 	{
 		boolean reqProcessed;
+		boolean respFlushed = false;
 		try
 		{
 			reqProcessed = requestCycle.processRequest();
-			if (reqProcessed)
+			if (reqProcessed && !Session.isSessionInvalidated(requestCycle))
 			{
+				respFlushed = true;
 				webResponse.flush();
 			}
 		}
@@ -291,6 +294,10 @@ public class WicketFilter implements Filter
 				chain.doFilter(httpServletRequest, httpServletResponse);
 			}
 		}
+		else if (!respFlushed)
+		{
+			webResponse.flush();
+		}
 		return reqProcessed;
 	}