A primary node is never notified to the listener when changing the session ID during authentication. Should I not notify the listener if non-primary node receives EVT_CHANGE_SESSION_ID?
Index: java/org/apache/catalina/ha/session/DeltaManager.java =================================================================== --- java/org/apache/catalina/ha/session/DeltaManager.java (revision 1094215) +++ java/org/apache/catalina/ha/session/DeltaManager.java (working copy) @@ -1463,7 +1463,7 @@ if (session != null) { String newSessionID = deserializeSessionId(msg.getSession()); session.setPrimarySession(false); - session.setId(newSessionID, notifyListenersOnReplication); + session.setId(newSessionID, false); } } Is JvmRouteSessionIDBinderListener also the same? Index: java/org/apache/catalina/ha/session/JvmRouteSessionIDBinderListener.java =================================================================== --- java/org/apache/catalina/ha/session/JvmRouteSessionIDBinderListener.java (revision 1037582) +++ java/org/apache/catalina/ha/session/JvmRouteSessionIDBinderListener.java (working copy) @@ -144,7 +144,7 @@ Session session = context.getManager().findSession( sessionmsg.getOrignalSessionID()); if (session != null) { - session.setId(sessionmsg.getBackupSessionID()); + session.setId(sessionmsg.getBackupSessionID(), false); } else if (log.isInfoEnabled()) log.info(sm.getString("jvmRoute.lostSession", sessionmsg.getOrignalSessionID(), 2011/4/17 <ma...@apache.org>: > 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 > > -- Keiichi.Fujino --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org