Commit fd3e5cf3 authored by Phillip Webb's avatar Phillip Webb

Defer disable persistence logic to a listener

Update TomcatEmbeddedServletContainerFactory so that logic to disable
persistent sessions happens after Tomcat's standard Manager creation
logic.

Fixes gh-4543
parent e520c47c
...@@ -405,16 +405,16 @@ public class TomcatEmbeddedServletContainerFactory ...@@ -405,16 +405,16 @@ public class TomcatEmbeddedServletContainerFactory
private void configureSession(Context context) { private void configureSession(Context context) {
long sessionTimeout = getSessionTimeoutInMinutes(); long sessionTimeout = getSessionTimeoutInMinutes();
context.setSessionTimeout((int) sessionTimeout); context.setSessionTimeout((int) sessionTimeout);
if (isPersistSession()) {
Manager manager = context.getManager(); Manager manager = context.getManager();
if (manager == null) { if (manager == null) {
manager = new StandardManager(); manager = new StandardManager();
context.setManager(manager); context.setManager(manager);
} }
if (isPersistSession()) {
configurePersistSession(manager); configurePersistSession(manager);
} }
else { else {
disablePersistSession(manager); context.addLifecycleListener(new DisablePersistSessionListener());
} }
} }
...@@ -427,12 +427,6 @@ public class TomcatEmbeddedServletContainerFactory ...@@ -427,12 +427,6 @@ public class TomcatEmbeddedServletContainerFactory
((StandardManager) manager).setPathname(file.getAbsolutePath()); ((StandardManager) manager).setPathname(file.getAbsolutePath());
} }
private void disablePersistSession(Manager manager) {
if (manager instanceof StandardManager) {
((StandardManager) manager).setPathname(null);
}
}
private long getSessionTimeoutInMinutes() { private long getSessionTimeoutInMinutes() {
long sessionTimeout = getSessionTimeout(); long sessionTimeout = getSessionTimeout();
if (sessionTimeout > 0) { if (sessionTimeout > 0) {
...@@ -771,4 +765,24 @@ public class TomcatEmbeddedServletContainerFactory ...@@ -771,4 +765,24 @@ public class TomcatEmbeddedServletContainerFactory
} }
/**
* {@link LifecycleListener} to disable persistence in the {@link StandardManager}. A
* {@link LifecycleListener} is used so not to interfere with Tomcat's default manager
* creation logic.
*/
private static class DisablePersistSessionListener implements LifecycleListener {
@Override
public void lifecycleEvent(LifecycleEvent event) {
if (event.getType().equals(Lifecycle.START_EVENT)) {
Context context = (Context) event.getLifecycle();
Manager manager = context.getManager();
if (manager != null && manager instanceof StandardManager) {
((StandardManager) manager).setPathname(null);
}
}
}
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment