一尘不染

如何通过Manager路径名在Spring Boot中禁用Tomcat会话持久性?

tomcat

在Tomcat中,有一个众所周知的配置选项conf/context.xml可以禁用会话持久性:

<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<Manager pathname="" />

如此处所示取消注释时,org.apache.catalina.Manager(eg
org.apache.catalina.session.StandardManager)的应用实现没有pathname告诉它将会话存储到磁盘的位置,因此,它没有将会话文件写入磁盘(例如在关机时),这正是我们想要的。

换句话说,这将禁用标准Tomcat功能以通过服务器重新启动来维持会话。

如何在带有嵌入式Tomcat的Spring Boot中实现相同的目标?

也许可以通过某种方式获得Manager对象以将属性路径名设置为null?


阅读 375

收藏
2020-06-16

共1个答案

一尘不染

您可以使用TomcatContextCustomizer访问管理器并应用必要的配置:

@Bean
public EmbeddedServletContainerFactory servletContainer() {
    TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
    tomcat.addContextCustomizers(new TomcatContextCustomizer() {

        @Override
        public void customize(Context context) {
            if (context.getManager() instanceof StandardManager) {
                ((StandardManager) context.getManager()).setPathname("");
            }
        }
    });
    return tomcat;
}
2020-06-16