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