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