Reduce coupling between StandardSession and JAAS as per Filip's suggestion
authormarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Thu, 9 Jul 2009 08:35:39 +0000 (08:35 +0000)
committermarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Thu, 9 Jul 2009 08:35:39 +0000 (08:35 +0000)
git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@792446 13f79535-47bb-0310-9956-ffa450edef68

java/org/apache/catalina/realm/GenericPrincipal.java
java/org/apache/catalina/session/LocalStrings.properties
java/org/apache/catalina/session/StandardSession.java

index 316f7f1..38fad52 100644 (file)
@@ -24,6 +24,7 @@ import java.util.Arrays;
 import java.util.List;
 
 import javax.security.auth.login.LoginContext;
+import javax.security.auth.login.LoginException;
 
 import org.apache.catalina.Realm;
 
@@ -189,11 +190,6 @@ public class GenericPrincipal implements Principal {
      */
     protected LoginContext loginContext = null;
 
-    public LoginContext getLoginContext() {
-        return loginContext;
-    }
-
-
     // --------------------------------------------------------- Public Methods
 
 
@@ -230,5 +226,23 @@ public class GenericPrincipal implements Principal {
 
     }
 
+    
+    /**
+     * Calls logout, if necessary, on any associated JAASLoginContext. May in
+     * the future be extended to cover other logout requirements.
+     * 
+     * @throws Exception If something goes wrong with the logout. Uses Exception
+     *                   to allow for future expansion of this method to cover
+     *                   other logout mechanisms that might throw a different
+     *                   exception to LoginContext
+     * 
+     */
+    public void logout() throws Exception {
+        if (loginContext != null) {
+            loginContext.logout();
+        }
+    }
+
+
 
 }
index 9d6a437..88b8c2c 100644 (file)
@@ -61,7 +61,7 @@ standardSession.getLastAccessedTime.ise=getLastAccessedTime: Session already inv
 standardSession.getId.ise=getId: Session already invalidated
 standardSession.getMaxInactiveInterval.ise=getMaxInactiveInterval: Session already invalidated
 standardSession.getValueNames.ise=getValueNames: Session already invalidated
-standardSession.jaaslogoutfail=Exception logging out user when expiring session 
+standardSession.logoutfail=Exception logging out user when expiring session 
 standardSession.notSerializable=Cannot serialize session attribute {0} for session {1}
 standardSession.removeAttribute.ise=removeAttribute: Session already invalidated
 standardSession.sessionEvent=Session event listener threw exception
index e9858fa..adfc4e9 100644 (file)
@@ -37,7 +37,6 @@ import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicInteger;
 
-import javax.security.auth.login.LoginException;
 import javax.servlet.ServletContext;
 import javax.servlet.http.HttpSession;
 import javax.servlet.http.HttpSessionActivationListener;
@@ -760,17 +759,15 @@ public class StandardSession
                 fireSessionEvent(Session.SESSION_DESTROYED_EVENT, null);
             }
 
-            // Call the JAAS logout method if necessary
+            // Call the logout method
             if (principal instanceof GenericPrincipal) {
                 GenericPrincipal gp = (GenericPrincipal) principal;
-                if (gp.getLoginContext() != null) {
-                    try {
-                        gp.getLoginContext().logout();
-                    } catch (LoginException e) {
-                        manager.getContainer().getLogger().error(
-                                sm.getString("standardSession.jaaslogoutfail"),
-                                e);
-                    }
+                try {
+                    gp.logout();
+                } catch (Exception e) {
+                    manager.getContainer().getLogger().error(
+                            sm.getString("standardSession.logoutfail"),
+                            e);
                 }
             }