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, Principal> 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, Principal>) 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