You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by re...@apache.org on 2005/03/30 17:50:40 UTC

cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/authenticator SingleSignOn.java

remm        2005/03/30 07:50:40

  Modified:    catalina/src/share/org/apache/catalina/session
                        StandardSession.java StandardManager.java
               catalina/src/share/org/apache/catalina Session.java
               catalina/src/share/org/apache/catalina/authenticator
                        SingleSignOn.java
  Log:
  - 33711: add events on passivate and activate to cleanup SSO.
  - Recycle sessions when passivating or expiring them. (risky change)
  
  Revision  Changes    Path
  1.56      +21 -8     jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardSession.java
  
  Index: StandardSession.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardSession.java,v
  retrieving revision 1.55
  retrieving revision 1.56
  diff -u -r1.55 -r1.56
  --- StandardSession.java	25 Mar 2005 16:49:28 -0000	1.55
  +++ StandardSession.java	30 Mar 2005 15:50:40 -0000	1.56
  @@ -321,13 +321,20 @@
        */
       public String getId() {
   
  -        // Comment out for now, will revisit for 5.5.10
  -        /*
  -         if ( !isValid() ) {
  -             throw new IllegalStateException
  -                 (sm.getString("standardSession.getId.ise"));
  -         }
  -	 */
  +        /*if ( !isValid() ) {
  +            throw new IllegalStateException
  +            (sm.getString("standardSession.getId.ise"));
  +        }*/
  +
  +        return (this.id);
  +
  +    }
  +
  +
  +    /**
  +     * Return the session identifier for this session.
  +     */
  +    public String getIdInternal() {
   
           return (this.id);
   
  @@ -737,6 +744,9 @@
        */
       public void passivate() {
   
  +        // Notify interested session event listeners
  +        fireSessionEvent(Session.SESSION_PASSIVATED_EVENT, null);
  +
           // Notify ActivationListeners
           HttpSessionEvent event = null;
           String keys[] = keys();
  @@ -764,6 +774,9 @@
        */
       public void activate() {
   
  +        // Notify interested session event listeners
  +        fireSessionEvent(Session.SESSION_ACTIVATED_EVENT, null);
  +
           // Notify ActivationListeners
           HttpSessionEvent event = null;
           String keys[] = keys();
  
  
  
  1.29      +10 -4     jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardManager.java
  
  Index: StandardManager.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardManager.java,v
  retrieving revision 1.28
  retrieving revision 1.29
  diff -u -r1.28 -r1.29
  --- StandardManager.java	7 Feb 2005 21:56:32 -0000	1.28
  +++ StandardManager.java	30 Mar 2005 15:50:40 -0000	1.29
  @@ -556,6 +556,8 @@
                   session.expire(false);
               } catch (Throwable t) {
                   ;
  +            } finally {
  +                session.recycle();
               }
           }
   
  @@ -670,12 +672,16 @@
           Session sessions[] = findSessions();
           for (int i = 0; i < sessions.length; i++) {
               StandardSession session = (StandardSession) sessions[i];
  -            if (!session.isValid())
  -                continue;
               try {
  -                session.expire();
  +                if (session.isValid()) {
  +                    session.expire();
  +                }
               } catch (Throwable t) {
                   ;
  +            } finally {
  +                // Measure against memory leaking if references to the session
  +                // object are kept in a shared field somewhere
  +                session.recycle();
               }
           }
   
  
  
  
  1.5       +13 -1     jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/Session.java
  
  Index: Session.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/Session.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- Session.java	27 Feb 2004 14:58:39 -0000	1.4
  +++ Session.java	30 Mar 2005 15:50:40 -0000	1.5
  @@ -51,6 +51,18 @@
       public static final String SESSION_DESTROYED_EVENT = "destroySession";
   
   
  +    /**
  +     * The SessionEvent event type when a session is activated.
  +     */
  +    public static final String SESSION_ACTIVATED_EVENT = "activateSession";
  +
  +
  +    /**
  +     * The SessionEvent event type when a session is passivated.
  +     */
  +    public static final String SESSION_PASSIVATED_EVENT = "passivateSession";
  +
  +
       // ------------------------------------------------------------- Properties
   
   
  
  
  
  1.23      +6 -4      jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/authenticator/SingleSignOn.java
  
  Index: SingleSignOn.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/authenticator/SingleSignOn.java,v
  retrieving revision 1.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- SingleSignOn.java	23 Feb 2005 19:27:56 -0000	1.22
  +++ SingleSignOn.java	30 Mar 2005 15:50:40 -0000	1.23
  @@ -275,7 +275,8 @@
       public void sessionEvent(SessionEvent event) {
   
           // We only care about session destroyed events
  -        if (!Session.SESSION_DESTROYED_EVENT.equals(event.getType()))
  +        if (!Session.SESSION_DESTROYED_EVENT.equals(event.getType())
  +                && (!Session.SESSION_PASSIVATED_EVENT.equals(event.getType())))
               return;
   
           // Look up the single session id associated with this session (if any)
  @@ -294,9 +295,10 @@
           // If so, we'll just remove the expired session from the
           // SSO.  If the session was logged out, we'll log out
           // of all session associated with the SSO.
  -        if ((session.getMaxInactiveInterval() > 0)
  +        if (((session.getMaxInactiveInterval() > 0)
               && (System.currentTimeMillis() - session.getLastAccessedTime() >=
  -                session.getMaxInactiveInterval() * 1000)) {
  +                session.getMaxInactiveInterval() * 1000)) 
  +            || (Session.SESSION_PASSIVATED_EVENT.equals(event.getType()))) {
               removeSession(ssoId, session);
           } else {
               // The session was logged out.
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org