From e57a51426b34b2cb513cc4ed52d62febc589fc87 Mon Sep 17 00:00:00 2001 From: srosse <stephane.rosse@frentix.com> Date: Mon, 18 Jan 2021 07:49:14 +0100 Subject: [PATCH] OO-5232: catch a common place for invalidate session exceptions --- .../dispatcher/AuthenticatedDispatcher.java | 36 ++++++++++++------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/src/main/java/org/olat/dispatcher/AuthenticatedDispatcher.java b/src/main/java/org/olat/dispatcher/AuthenticatedDispatcher.java index 3dfad765e6c..fec85d6039d 100644 --- a/src/main/java/org/olat/dispatcher/AuthenticatedDispatcher.java +++ b/src/main/java/org/olat/dispatcher/AuthenticatedDispatcher.java @@ -160,20 +160,9 @@ public class AuthenticatedDispatcher implements Dispatcher { // authenticated! try { - //kill session if not secured via SSL if (forceSecureAccessOnly && !request.isSecure()) { - SessionInfo sessionInfo = usess.getSessionInfo(); - if (sessionInfo!=null) { - HttpSession session = sessionInfo.getSession(); - if (session!=null) { - try{ - session.invalidate(); - } catch(IllegalStateException ise) { - // thrown when session already invalidated. fine. ignore. - } - } - } + invalidateSession(usess); redirectToDefaultDispatcher(request, response); return; } @@ -267,7 +256,14 @@ public class AuthenticatedDispatcher implements Dispatcher { } private void processValidDispatchURI(UserRequest ureq, UserSession usess, HttpServletRequest request, HttpServletResponse response) { - Windows ws = Windows.getWindows(ureq); + Windows ws; + try { + ws = Windows.getWindows(ureq); + } catch (IllegalStateException e) { + log.error("", e);// session was invalidate, return to login screen + redirectToDefaultDispatcher(request, response); + return; + } ws.disposeClosedWindows(ureq); Window window = ws.getWindow(ureq); if (window == null) { @@ -283,6 +279,20 @@ public class AuthenticatedDispatcher implements Dispatcher { } } + private void invalidateSession(UserSession usess) { + SessionInfo sessionInfo = usess.getSessionInfo(); + if (sessionInfo!=null) { + HttpSession session = sessionInfo.getSession(); + if (session!=null) { + try{ + session.invalidate(); + } catch(IllegalStateException ise) { + // thrown when session already invalidated. fine. ignore. + } + } + } + } + private void redirectToDefaultDispatcher(HttpServletRequest request, HttpServletResponse response) { if(ServletUtil.acceptJson(request)) { try { -- GitLab