diff --git a/libs/gretty-runner-jetty11/src/main/groovy/org/akhikhl/gretty/JettyConfigurerImpl.groovy b/libs/gretty-runner-jetty11/src/main/groovy/org/akhikhl/gretty/JettyConfigurerImpl.groovy index c4c93a0df..8d6fa11a0 100644 --- a/libs/gretty-runner-jetty11/src/main/groovy/org/akhikhl/gretty/JettyConfigurerImpl.groovy +++ b/libs/gretty-runner-jetty11/src/main/groovy/org/akhikhl/gretty/JettyConfigurerImpl.groovy @@ -36,7 +36,6 @@ class JettyConfigurerImpl implements JettyConfigurer { private static final Logger log = LoggerFactory.getLogger(JettyConfigurerImpl) private SSOAuthenticatorFactory ssoAuthenticatorFactory - private SessionHandler sharedSessionHandler @Override def addLifeCycleListener(lifecycle, listener) { @@ -175,12 +174,9 @@ class JettyConfigurerImpl implements JettyConfigurer { void configureSessionManager(server, context, Map serverParams, Map webappParams) { SessionHandler sessionHandler if(serverParams.singleSignOn) { - sessionHandler = sharedSessionHandler - if(sessionHandler == null) { - sessionHandler = sharedSessionHandler = new SessionHandler() - sessionHandler.setMaxInactiveInterval(60 * 30) // 30 minutes - sessionHandler.getSessionCookieConfig().setPath('/') - } + sessionHandler = new SingleSignOnSessionHandler() + sessionHandler.setMaxInactiveInterval(60 * 30) // 30 minutes + sessionHandler.getSessionCookieConfig().setPath('/') } else { sessionHandler = new SessionHandler() sessionHandler.setMaxInactiveInterval(60 * 30) // 30 minutes diff --git a/libs/gretty-runner-jetty11/src/main/groovy/org/akhikhl/gretty/SingleSignOnSessionHandler.groovy b/libs/gretty-runner-jetty11/src/main/groovy/org/akhikhl/gretty/SingleSignOnSessionHandler.groovy new file mode 100644 index 000000000..c7624e220 --- /dev/null +++ b/libs/gretty-runner-jetty11/src/main/groovy/org/akhikhl/gretty/SingleSignOnSessionHandler.groovy @@ -0,0 +1,31 @@ +package org.akhikhl.gretty + +import org.eclipse.jetty.server.session.Session +import org.eclipse.jetty.server.session.SessionHandler + +class SingleSignOnSessionHandler extends SessionHandler { + + @Override + Session getSession(String id) { + Session session = getLocalSession(id) + if (session == null) { + for (SessionHandler handler : getSessionIdManager().getSessionHandlers()) { + + if (handler == this || !(handler instanceof SingleSignOnSessionHandler)) { + continue + } + + session = ((SingleSignOnSessionHandler) handler).getLocalSession(id) + if (session != null) { + break + } + } + } + + return session + } + + private Session getLocalSession(String id) { + return super.getSession(id) + } +}