Index: lams_common/src/java/org/lamsfoundation/lams/web/session/SessionManager.java =================================================================== diff -u -rec598ca33b2dfc2835e3e464785abe6771191f63 -r555a2b11eba3ee4922c536eb4a21b8a0406b43d5 --- lams_common/src/java/org/lamsfoundation/lams/web/session/SessionManager.java (.../SessionManager.java) (revision ec598ca33b2dfc2835e3e464785abe6771191f63) +++ lams_common/src/java/org/lamsfoundation/lams/web/session/SessionManager.java (.../SessionManager.java) (revision 555a2b11eba3ee4922c536eb4a21b8a0406b43d5) @@ -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 -r555a2b11eba3ee4922c536eb4a21b8a0406b43d5 --- 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 555a2b11eba3ee4922c536eb4a21b8a0406b43d5) @@ -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