From 538b0dc3d2b2e1ad1d9840137ab292ff699077ef Mon Sep 17 00:00:00 2001 From: markt Date: Thu, 9 Jul 2009 08:35:39 +0000 Subject: [PATCH] Reduce coupling between StandardSession and JAAS as per Filip's suggestion git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@792446 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/catalina/realm/GenericPrincipal.java | 24 +++++++++++++++++----- .../catalina/session/LocalStrings.properties | 2 +- .../apache/catalina/session/StandardSession.java | 17 +++++++-------- 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/java/org/apache/catalina/realm/GenericPrincipal.java b/java/org/apache/catalina/realm/GenericPrincipal.java index 316f7f1c1..38fad529a 100644 --- a/java/org/apache/catalina/realm/GenericPrincipal.java +++ b/java/org/apache/catalina/realm/GenericPrincipal.java @@ -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(); + } + } + + } diff --git a/java/org/apache/catalina/session/LocalStrings.properties b/java/org/apache/catalina/session/LocalStrings.properties index 9d6a43755..88b8c2c3d 100644 --- a/java/org/apache/catalina/session/LocalStrings.properties +++ b/java/org/apache/catalina/session/LocalStrings.properties @@ -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 diff --git a/java/org/apache/catalina/session/StandardSession.java b/java/org/apache/catalina/session/StandardSession.java index e9858fa29..adfc4e9d4 100644 --- a/java/org/apache/catalina/session/StandardSession.java +++ b/java/org/apache/catalina/session/StandardSession.java @@ -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); } } -- 2.11.0