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

markt-asf pushed a commit to branch 9.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/9.0.x by this push:
     new e64c853953 Fix back-port
e64c853953 is described below

commit e64c853953d47fc95c2501065d71d99b793efd3e
Author: Mark Thomas <[email protected]>
AuthorDate: Mon Aug 24 14:19:48 2026 +0100

    Fix back-port
---
 .../catalina/session/LocalStrings.properties       |  1 +
 .../catalina/session/PersistentManagerBase.java    | 14 ++++++-------
 .../catalina/session/TestPersistentManager.java    |  6 ++++++
 webapps/docs/changelog.xml                         | 10 ++++++---
 webapps/docs/config/manager.xml                    | 24 +++++++++-------------
 5 files changed, 30 insertions(+), 25 deletions(-)

diff --git a/java/org/apache/catalina/session/LocalStrings.properties 
b/java/org/apache/catalina/session/LocalStrings.properties
index f4562c6970..66bd151c91 100644
--- a/java/org/apache/catalina/session/LocalStrings.properties
+++ b/java/org/apache/catalina/session/LocalStrings.properties
@@ -51,6 +51,7 @@ managerBase.sessionNotFound=The session [{0}] was not found
 managerBase.sessionTimeout=Invalid session timeout setting [{0}]
 managerBase.setContextNotNew=It is illegal to call setContext() to change the 
Context associated with a Manager if the Manager is not in the NEW state
 
+persistentManager.activityCheckRequired=The system property 
org.apache.catalina.session.StandardSession.ACTIVITY_CHECK must be set to true 
(either explicitly or via STRICT_SERVLET_COMPLIANCE) if the [{0}] attribute is 
configured.
 persistentManager.backupMaxIdle=Backing up session [{0}] to Store, idle for 
[{1}] seconds
 persistentManager.deserializeError=Error deserializing Session [{0}]
 persistentManager.isLoadedError=Error checking if session [{0}] is loaded in 
memory
diff --git a/java/org/apache/catalina/session/PersistentManagerBase.java 
b/java/org/apache/catalina/session/PersistentManagerBase.java
index 6fe6f44044..ed2aef3587 100644
--- a/java/org/apache/catalina/session/PersistentManagerBase.java
+++ b/java/org/apache/catalina/session/PersistentManagerBase.java
@@ -242,7 +242,9 @@ public abstract class PersistentManagerBase extends 
ManagerBase implements Store
      * @param max time in seconds to wait for possible swap out
      */
     public void setMaxIdleSwap(int max) {
-
+        if (max > -1 && !StandardSession.ACTIVITY_CHECK) {
+            throw new 
IllegalArgumentException(sm.getString("persistentManager.activityCheckRequired",
 "maxIdleSwap"));
+        }
         if (max == this.maxIdleSwap) {
             return;
         }
@@ -273,7 +275,9 @@ public abstract class PersistentManagerBase extends 
ManagerBase implements Store
      * @param min time in seconds before a possible swap out
      */
     public void setMinIdleSwap(int min) {
-
+        if (min > -1 && !StandardSession.ACTIVITY_CHECK) {
+            throw new 
IllegalArgumentException(sm.getString("persistentManager.activityCheckRequired",
 "minIdleSwap"));
+        }
         if (this.minIdleSwap == min) {
             return;
         }
@@ -360,12 +364,6 @@ public abstract class PersistentManagerBase extends 
ManagerBase implements Store
     }
 
 
-    @Override
-    public boolean getSessionActivityCheck() {
-        return super.getSessionActivityCheck() || minIdleSwap > -1 || 
maxIdleSwap > -1;
-    }
-
-
     // --------------------------------------------------------- Public Methods
 
     /**
diff --git a/test/org/apache/catalina/session/TestPersistentManager.java 
b/test/org/apache/catalina/session/TestPersistentManager.java
index dc5cdec308..5689f3c01e 100644
--- a/test/org/apache/catalina/session/TestPersistentManager.java
+++ b/test/org/apache/catalina/session/TestPersistentManager.java
@@ -25,6 +25,7 @@ import javax.servlet.http.HttpSessionEvent;
 import javax.servlet.http.HttpSessionListener;
 
 import org.junit.Assert;
+import org.junit.Before;
 import org.junit.Test;
 
 import org.apache.catalina.Context;
@@ -42,6 +43,11 @@ import org.easymock.IAnswer;
 
 public class TestPersistentManager {
 
+    @Before
+    public void setup() {
+        
System.setProperty("org.apache.catalina.session.StandardSession.ACTIVITY_CHECK",
 "true");
+    }
+
     @Test
     public void testMinIdleSwap() throws Exception {
         PersistentManager manager = new PersistentManager();
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 1a842e802b..6783b6d70b 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -151,9 +151,13 @@
       <fix>
         Ensure that <code>PersistentManager</code> implementations that extend
         <code>PersistentManagerBase</code> do not swap out sessions that are
-        associated with a request that is currently being processed. This
-        includes not swapping out a session unless the session was created when
-        activity tracking was enabled. (markt)
+        associated with a request that is currently being processed. As a
+        result, it is now a requirement that the system property
+        <code>org.apache.catalina.session.StandardSession.ACTIVITY_CHECK</code>
+        is set to <code>true</code> (either explicitly or via
+        <code>STRICT_SERVLET_COMPLIANCE</code>) if either
+        <code>minIdleSwap</code> or <code>maxIdleSwap</code> are configured.
+        (markt)
       </fix>
     </changelog>
   </subsection>
diff --git a/webapps/docs/config/manager.xml b/webapps/docs/config/manager.xml
index 8ef33cc943..8699c877e3 100644
--- a/webapps/docs/config/manager.xml
+++ b/webapps/docs/config/manager.xml
@@ -266,13 +266,11 @@
         feature is enabled, the time interval specified here should be equal to
         or longer than the value specified for <code>maxIdleBackup</code>. By
         default, this feature is disabled.</p>
-        <p>If this feature is enabled, the <code>sessionActivityCheck</code>
-        attribute is forced to be true to ensure that currently active sessions
-        are not swapped out.</p>
-        <p>If this feature is enabled at runtime, e.g. via JMX, and session
-        activity was not being tracked prior to the feature being enabled, only
-        sessions created after the feature is enabled will be eligible for swap
-        out.</p>
+        <p>If this feature is enabled, the system property
+        <code>org.apache.catalina.session.StandardSession.ACTIVITY_CHECK</code>
+        must be set to <code>true</code> either explicitly or via
+        <code>STRICT_SERVLET_COMPLIANCE</code> else the configuration will be
+        rejected.</p>
       </attribute>
 
       <attribute name="minIdleSwap" required="false">
@@ -282,13 +280,11 @@
         swapped out to keep the active session count down. If specified, this
         value should be less than that specified by <code>maxIdleSwap</code>.
         By default, this value is set to <code>-1</code>.</p>
-        <p>If this feature is enabled, the <code>sessionActivityCheck</code>
-        attribute is forced to be true to ensure that currently active sessions
-        are not swapped out.</p>
-        <p>If this feature is enabled at runtime, e.g. via JMX, and session
-        activity was not being tracked prior to the feature being enabled, only
-        sessions created after the feature is enabled will be eligible for swap
-        out.</p>
+        <p>If this feature is enabled, the system property
+        <code>org.apache.catalina.session.StandardSession.ACTIVITY_CHECK</code>
+        must be set to <code>true</code> either explicitly or via
+        <code>STRICT_SERVLET_COMPLIANCE</code> else the configuration will be
+        rejected.</p>
       </attribute>
 
       <attribute name="persistAuthentication" required="false">


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to