Index: lams_build/build_base.xml =================================================================== diff -u -rd4997181b2a73dc16bdd0a69932d443fe7dbfbd7 -r8482164570cc9e8db87a1419dc6944c58553b327 --- lams_build/build_base.xml (.../build_base.xml) (revision d4997181b2a73dc16bdd0a69932d443fe7dbfbd7) +++ lams_build/build_base.xml (.../build_base.xml) (revision 8482164570cc9e8db87a1419dc6944c58553b327) @@ -34,6 +34,7 @@ + Index: lams_build/lib/lams/lams-central.jar =================================================================== diff -u -ra939bcf145b0e4deab5838f87b047df5ca48c92d -r8482164570cc9e8db87a1419dc6944c58553b327 Binary files differ Index: lams_build/lib/lams/lams.jar =================================================================== diff -u -ra939bcf145b0e4deab5838f87b047df5ca48c92d -r8482164570cc9e8db87a1419dc6944c58553b327 Binary files differ Index: lams_central/.classpath =================================================================== diff -u -r9a097b9b5569beca5152ad9bf5d94212ba148611 -r8482164570cc9e8db87a1419dc6944c58553b327 --- lams_central/.classpath (.../.classpath) (revision 9a097b9b5569beca5152ad9bf5d94212ba148611) +++ lams_central/.classpath (.../.classpath) (revision 8482164570cc9e8db87a1419dc6944c58553b327) @@ -38,5 +38,6 @@ + Index: lams_central/src/java/org/lamsfoundation/lams/web/SessionListener.java =================================================================== diff -u -rf2dcf163cc2c619cd1a4a56d7242d8226be771aa -r8482164570cc9e8db87a1419dc6944c58553b327 --- lams_central/src/java/org/lamsfoundation/lams/web/SessionListener.java (.../SessionListener.java) (revision f2dcf163cc2c619cd1a4a56d7242d8226be771aa) +++ lams_central/src/java/org/lamsfoundation/lams/web/SessionListener.java (.../SessionListener.java) (revision 8482164570cc9e8db87a1419dc6944c58553b327) @@ -23,25 +23,36 @@ /* $$Id$$ */ package org.lamsfoundation.lams.web; +import java.security.Principal; import java.util.Locale; +import javax.naming.InitialContext; +import javax.naming.NamingException; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; import javax.servlet.jsp.jstl.core.Config; +import org.apache.log4j.Logger; +import org.jboss.security.CacheableManager; +import org.lamsfoundation.lams.security.SimplePrincipal; +import org.lamsfoundation.lams.usermanagement.dto.UserDTO; import org.lamsfoundation.lams.util.Configuration; import org.lamsfoundation.lams.util.ConfigurationKeys; import org.lamsfoundation.lams.util.LanguageUtil; import org.lamsfoundation.lams.web.filter.LocaleFilter; +import org.lamsfoundation.lams.web.util.AttributeNames; /** * Listens for creation of HTTP sessions. Sets inactive timeout and default locale. */ public class SessionListener implements HttpSessionListener { private static int timeout; //in seconds + private static CacheableManager authenticationManager; + private static Logger log = Logger.getLogger(SessionListener.class); + static { SessionListener.timeout = Configuration.getAsInt(ConfigurationKeys.INACTIVE_TIME); } @@ -59,15 +70,34 @@ //LocaleFilter class. But this part code can cope with login.jsp Locale. if (session != null) { String defaults[] = LanguageUtil.getDefaultLangCountry(); - Locale preferredLocale = new Locale(defaults[0] == null ? "" : defaults[0], defaults[1] == null ? "" - : defaults[1]); + Locale preferredLocale = new Locale(defaults[0] == null ? "" : defaults[0], + defaults[1] == null ? "" : defaults[1]); session.setAttribute(LocaleFilter.PREFERRED_LOCALE_KEY, preferredLocale); Config.set(session, Config.FMT_LOCALE, preferredLocale); } } + @SuppressWarnings("unchecked") @Override - public void sessionDestroyed(HttpSessionEvent se) { - //nothing to do + public void sessionDestroyed(HttpSessionEvent sessionEvent) { + if (SessionListener.authenticationManager == null) { + try { + InitialContext initialContext = new InitialContext(); + SessionListener.authenticationManager = (CacheableManager) initialContext + .lookup("java:jboss/jaas/lams/authenticationMgr"); + } catch (NamingException e) { + SessionListener.log.error("Error while getting authentication manager.", e); + } + } + + // clear the authentication cache when the session is invalidated + HttpSession session = sessionEvent.getSession(); + if (session != null) { + UserDTO userDTO = (UserDTO) session.getAttribute(AttributeNames.USER); + if (userDTO != null) { + Principal principal = new SimplePrincipal(userDTO.getLogin()); + SessionListener.authenticationManager.flushCache(principal); + } + } } } \ No newline at end of file