Index: lams_common/src/java/org/lamsfoundation/lams/web/session/SessionManager.java =================================================================== diff -u -rd9d91ea8c7d238f840afe89689c902d856f2ba6d -r563e90bc56ef37e24ad9cdc801e3fe6350e19932 --- lams_common/src/java/org/lamsfoundation/lams/web/session/SessionManager.java (.../SessionManager.java) (revision d9d91ea8c7d238f840afe89689c902d856f2ba6d) +++ lams_common/src/java/org/lamsfoundation/lams/web/session/SessionManager.java (.../SessionManager.java) (revision 563e90bc56ef37e24ad9cdc801e3fe6350e19932) @@ -77,7 +77,7 @@ /** * Stores session in current thread and mapping so other modules can refer to it. */ - public static void startSession(HttpServletRequest request) { + public static HttpSession startSession(HttpServletRequest request) { HttpSession session = request.getSession(); String sessionId = session.getId(); @@ -100,6 +100,8 @@ } loginMapping.put(login, session); } + + return session; } /** Index: lams_common/src/java/org/lamsfoundation/lams/web/session/SystemSessionFilter.java =================================================================== diff -u -rf4d538fe4dbd4575c45b6fc3f203ea0bde22efa4 -r563e90bc56ef37e24ad9cdc801e3fe6350e19932 --- lams_common/src/java/org/lamsfoundation/lams/web/session/SystemSessionFilter.java (.../SystemSessionFilter.java) (revision f4d538fe4dbd4575c45b6fc3f203ea0bde22efa4) +++ lams_common/src/java/org/lamsfoundation/lams/web/session/SystemSessionFilter.java (.../SystemSessionFilter.java) (revision 563e90bc56ef37e24ad9cdc801e3fe6350e19932) @@ -33,14 +33,19 @@ import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import org.apache.log4j.Logger; +import org.springframework.web.util.NestedServletException; + /** * This filter must set before org.lamsfoundation.lams.web.filter.LocaleFilter in web.xml * because LocaleFilter need get value from SystemSession. * * @author Steve.Ni */ public class SystemSessionFilter implements Filter { + private static Logger log = Logger.getLogger(SystemSessionFilter.class.getName()); private static final String CONTEXT_ERROR_PAGE = "/error.jsp"; @@ -65,10 +70,23 @@ return; } - SessionManager.startSession(httpRequest); + HttpSession session = SessionManager.startSession(httpRequest); // do following part of chain - chain.doFilter(request, response); - SessionManager.endSession(); + try { + chain.doFilter(request, response); + } catch (NestedServletException e) { + if (e.getCause() instanceof IllegalStateException) { + // There seems to be a problem with Infinispan session invalidation. + // Until we upgrade WildFly we need to keep these safety measures. + String sessionId = session.getId(); + log.warn("Session " + sessionId + " was already invalidated"); + SessionManager.removeSessionByID(sessionId, false, true); + } else { + throw e; + } + } finally { + SessionManager.endSession(); + } } @Override