Author: markt Date: Sat Apr 16 22:25:28 2011 New Revision: 1094069 URL: http://svn.apache.org/viewvc?rev=1094069&view=rev Log: Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=51042 Don't trigger session creation listeners when changing the session ID during authentication.
Modified: tomcat/trunk/java/org/apache/catalina/Session.java tomcat/trunk/java/org/apache/catalina/ha/session/DeltaManager.java tomcat/trunk/java/org/apache/catalina/ha/session/DeltaSession.java tomcat/trunk/java/org/apache/catalina/ha/session/JvmRouteBinderValve.java tomcat/trunk/java/org/apache/catalina/manager/DummyProxySession.java tomcat/trunk/java/org/apache/catalina/session/ManagerBase.java tomcat/trunk/java/org/apache/catalina/session/StandardSession.java tomcat/trunk/webapps/docs/changelog.xml Modified: tomcat/trunk/java/org/apache/catalina/Session.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/Session.java?rev=1094069&r1=1094068&r2=1094069&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/Session.java (original) +++ tomcat/trunk/java/org/apache/catalina/Session.java Sat Apr 16 22:25:28 2011 @@ -118,7 +118,8 @@ public interface Session { /** - * Set the session identifier for this session. + * Set the session identifier for this session and notifies any associated + * listeners that a new session has been created. * * @param id The new session identifier */ @@ -126,6 +127,17 @@ public interface Session { /** + * Set the session identifier for this session and optionally notifies any + * associated listeners that a new session has been created. + * + * @param id The new session identifier + * @param notify Should any associated listeners be notified that a new + * session has been created? + */ + public void setId(String id, boolean notify); + + + /** * Return descriptive information about this Session implementation and * the corresponding version number, in the format * <code><description>/<version></code>. Modified: tomcat/trunk/java/org/apache/catalina/ha/session/DeltaManager.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/session/DeltaManager.java?rev=1094069&r1=1094068&r2=1094069&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/ha/session/DeltaManager.java (original) +++ tomcat/trunk/java/org/apache/catalina/ha/session/DeltaManager.java Sat Apr 16 22:25:28 2011 @@ -1387,12 +1387,7 @@ public CatalinaCluster getCluster() { // use container maxInactiveInterval so that session will expire correctly in case of primary transfer session.setMaxInactiveInterval(getMaxInactiveInterval()); session.access(); - if(notifySessionListenersOnReplication) { - session.setId(msg.getSessionID()); - } else { - session.setIdInternal(msg.getSessionID()); - add(session); - } + session.setId(msg.getSessionID(), notifySessionListenersOnReplication); session.resetDeltaRequest(); session.endAccess(); @@ -1468,12 +1463,7 @@ public CatalinaCluster getCluster() { if (session != null) { String newSessionID = deserializeSessionId(msg.getSession()); session.setPrimarySession(false); - if (notifySessionListenersOnReplication) { - session.setId(newSessionID); - } else { - session.setIdInternal(newSessionID); - add(session); - } + session.setId(newSessionID, notifyListenersOnReplication); } } Modified: tomcat/trunk/java/org/apache/catalina/ha/session/DeltaSession.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/session/DeltaSession.java?rev=1094069&r1=1094068&r2=1094069&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/ha/session/DeltaSession.java (original) +++ tomcat/trunk/java/org/apache/catalina/ha/session/DeltaSession.java Sat Apr 16 22:25:28 2011 @@ -244,17 +244,17 @@ public class DeltaSession extends Standa this.isPrimarySession = primarySession; } + /** - * Set the session identifier for this session without notify listeners. - * - * @param id - * The new session identifier + * {@inheritDoc} */ - public void setIdInternal(String id) { - this.id = id; + @Override + public void setId(String id, boolean notify) { + super.setId(id, notify); resetDeltaRequest(); } + /** * Set the session identifier for this session. * Modified: tomcat/trunk/java/org/apache/catalina/ha/session/JvmRouteBinderValve.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/session/JvmRouteBinderValve.java?rev=1094069&r1=1094068&r2=1094069&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/ha/session/JvmRouteBinderValve.java (original) +++ tomcat/trunk/java/org/apache/catalina/ha/session/JvmRouteBinderValve.java Sat Apr 16 22:25:28 2011 @@ -359,8 +359,7 @@ public class JvmRouteBinderValve extends protected void changeSessionID(Request request, String sessionId, String newSessionID, Session catalinaSession) { fireLifecycleEvent("Before session migration", catalinaSession); - // FIXME: setId trigger session Listener, but only chance to register manager with correct id! - catalinaSession.setId(newSessionID); + catalinaSession.setId(newSessionID, false); // FIXME: Why we remove change data from other running request? // setId also trigger resetDeltaRequest!! if (catalinaSession instanceof DeltaSession) Modified: tomcat/trunk/java/org/apache/catalina/manager/DummyProxySession.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/manager/DummyProxySession.java?rev=1094069&r1=1094068&r2=1094069&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/manager/DummyProxySession.java (original) +++ tomcat/trunk/java/org/apache/catalina/manager/DummyProxySession.java Sat Apr 16 22:25:28 2011 @@ -169,6 +169,12 @@ public class DummyProxySession implement } @Override + public void setId(String id, boolean notify) { + this.sessionId = id; + // Ignore notify + } + + @Override public void setManager(Manager manager) { // NOOP } 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=1094069&r1=1094068&r2=1094069&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/session/ManagerBase.java (original) +++ tomcat/trunk/java/org/apache/catalina/session/ManagerBase.java Sat Apr 16 22:25:28 2011 @@ -768,7 +768,7 @@ public abstract class ManagerBase extend */ @Override public void changeSessionId(Session session) { - session.setId(generateSessionId()); + session.setId(generateSessionId(), false); } Modified: tomcat/trunk/java/org/apache/catalina/session/StandardSession.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/session/StandardSession.java?rev=1094069&r1=1094068&r2=1094069&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/session/StandardSession.java (original) +++ tomcat/trunk/java/org/apache/catalina/session/StandardSession.java Sat Apr 16 22:25:28 2011 @@ -374,6 +374,15 @@ public class StandardSession implements */ @Override public void setId(String id) { + setId(id, true); + } + + + /** + * {@inheritDoc} + */ + @Override + public void setId(String id, boolean notify) { if ((this.id != null) && (manager != null)) manager.remove(this); @@ -382,7 +391,10 @@ public class StandardSession implements if (manager != null) manager.add(this); - tellNew(); + + if (notify) { + tellNew(); + } } Modified: tomcat/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1094069&r1=1094068&r2=1094069&view=diff ============================================================================== --- tomcat/trunk/webapps/docs/changelog.xml (original) +++ tomcat/trunk/webapps/docs/changelog.xml Sat Apr 16 22:25:28 2011 @@ -65,6 +65,10 @@ <bug>51038</bug>: Ensure that asynchronous requests are included in access logs. (markt) </fix> + <fix> + <bug>51042</bug>: Don't trigger session creation listeners when a + session ID is changed as part of the authentication process. (markt) + </fix> </changelog> </subsection> <subsection name="Coyote"> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org