From bf8f5ea8c1102433c67ebdcadbe2e6171ebde61a Mon Sep 17 00:00:00 2001 From: hengsin Date: Wed, 1 Apr 2020 17:19:18 +0800 Subject: [PATCH] IDEMPIERE-4206 Session timeout shown sometimes when changing roles --- .../WEB-INF/src/org/adempiere/webui/AdempiereWebUI.java | 8 ++++++-- .../adempiere/webui/session/SessionContextListener.java | 5 +++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereWebUI.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereWebUI.java index 6899059656..a841868c40 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereWebUI.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/AdempiereWebUI.java @@ -81,6 +81,8 @@ import org.zkoss.zul.Window; */ public class AdempiereWebUI extends Window implements EventListener, IWebClient { + public static final String DESKTOP_SESSION_INVALIDATED_ATTR = "DesktopSessionInvalidated"; + /** * */ @@ -569,9 +571,11 @@ public class AdempiereWebUI extends Window implements EventListener, IWeb //redirect must happens before removeDesktop below, otherwise you get NPE Executions.getCurrent().sendRedirect("index.zul"); - //remove old desktop - if (desktopCache != null) + //remove old desktop + if (desktopCache != null) { + desktop.setAttribute(DESKTOP_SESSION_INVALIDATED_ATTR, Boolean.TRUE); desktopCache.removeDesktop(desktop); + } } @Override diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/session/SessionContextListener.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/session/SessionContextListener.java index 6efd564e81..c09c9933e0 100644 --- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/session/SessionContextListener.java +++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/session/SessionContextListener.java @@ -237,6 +237,11 @@ public class SessionContextListener implements ExecutionInit, return; } + Object sessionInvalidated = desktop.getAttribute(AdempiereWebUI.DESKTOP_SESSION_INVALIDATED_ATTR); + if (sessionInvalidated != null) { + return; + } + if (ServerContext.getCurrentInstance().isEmpty() || !isContextValid()) { setupExecutionContextFromSession(Executions.getCurrent());