Author: markt
Date: Thu Oct 16 19:01:35 2014
New Revision: 1632411

URL: http://svn.apache.org/r1632411
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=57089
Ensure that configuration of a session ID generator is not lost when a web 
application is reloaded.

Modified:
    tomcat/trunk/java/org/apache/catalina/session/ManagerBase.java
    tomcat/trunk/java/org/apache/catalina/util/SessionIdGeneratorBase.java
    tomcat/trunk/webapps/docs/changelog.xml

Modified: tomcat/trunk/java/org/apache/catalina/session/ManagerBase.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/session/ManagerBase.java?rev=1632411&r1=1632410&r2=1632411&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/session/ManagerBase.java (original)
+++ tomcat/trunk/java/org/apache/catalina/session/ManagerBase.java Thu Oct 16 
19:01:35 2014
@@ -36,6 +36,7 @@ import java.util.concurrent.atomic.Atomi
 import org.apache.catalina.Container;
 import org.apache.catalina.Context;
 import org.apache.catalina.Engine;
+import org.apache.catalina.Lifecycle;
 import org.apache.catalina.LifecycleException;
 import org.apache.catalina.Manager;
 import org.apache.catalina.Session;
@@ -615,17 +616,23 @@ public abstract class ManagerBase extend
             sig.setSecureRandomProvider(getSecureRandomProvider());
         }
 
-        // Force initialization of the random number generator
-        if (log.isDebugEnabled())
-            log.debug("Force random number initialization starting");
-        sessionIdGenerator.generateSessionId();
-        if (log.isDebugEnabled())
-            log.debug("Force random number initialization completed");
+        if (sessionIdGenerator instanceof Lifecycle) {
+            ((Lifecycle) sessionIdGenerator).start();
+        } else {
+            // Force initialization of the random number generator
+            if (log.isDebugEnabled())
+                log.debug("Force random number initialization starting");
+            sessionIdGenerator.generateSessionId();
+            if (log.isDebugEnabled())
+                log.debug("Force random number initialization completed");
+        }
     }
 
     @Override
     protected void stopInternal() throws LifecycleException {
-        this.sessionIdGenerator = null;
+        if (sessionIdGenerator instanceof Lifecycle) {
+            ((Lifecycle) sessionIdGenerator).stop();
+        }
     }
 
 

Modified: tomcat/trunk/java/org/apache/catalina/util/SessionIdGeneratorBase.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/util/SessionIdGeneratorBase.java?rev=1632411&r1=1632410&r2=1632411&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/util/SessionIdGeneratorBase.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/util/SessionIdGeneratorBase.java Thu 
Oct 16 19:01:35 2014
@@ -22,12 +22,15 @@ import java.security.SecureRandom;
 import java.util.Queue;
 import java.util.concurrent.ConcurrentLinkedQueue;
 
+import org.apache.catalina.LifecycleException;
+import org.apache.catalina.LifecycleState;
 import org.apache.catalina.SessionIdGenerator;
 import org.apache.juli.logging.Log;
 import org.apache.juli.logging.LogFactory;
 import org.apache.tomcat.util.res.StringManager;
 
-public abstract class SessionIdGeneratorBase implements SessionIdGenerator {
+public abstract class SessionIdGeneratorBase extends LifecycleBase
+        implements SessionIdGenerator {
 
     private static final Log log = 
LogFactory.getLog(SessionIdGeneratorBase.class);
 
@@ -239,4 +242,32 @@ public abstract class SessionIdGenerator
                     result.getAlgorithm(), Long.valueOf(t2-t1)));
         return result;
     }
+
+
+    @Override
+    protected void initInternal() throws LifecycleException {
+        // NO-OP
+    }
+
+
+    @Override
+    protected void startInternal() throws LifecycleException {
+        // Ensure SecureRandom has been initialised
+        generateSessionId();
+
+        setState(LifecycleState.STARTING);
+    }
+
+
+    @Override
+    protected void stopInternal() throws LifecycleException {
+        setState(LifecycleState.STOPPING);
+        randoms.clear();
+    }
+
+
+    @Override
+    protected void destroyInternal() throws LifecycleException {
+        // NO-OP
+    }
 }

Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1632411&r1=1632410&r2=1632411&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Thu Oct 16 19:01:35 2014
@@ -150,6 +150,10 @@
         resource. The context.xml having an external docBase has already been
         registered as a redeploy resource at first. (kfujino)
       </fix>
+      <fix>
+        <bug>57089</bug>: Ensure that configuration of a session ID generator 
is
+        not lost when a web application is reloaded. (markt)
+      </fix>
     </changelog>
   </subsection>
   <subsection name="Coyote">



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

Reply via email to