在Tomcat中,有一个众所周知的配置选项conf/context.xml可以禁用会话持久性:
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告诉它将会话存储到磁盘的位置,因此,它没有将会话文件写入磁盘(例如在关机时),这正是我们想要的。
org.apache.catalina.Manager
org.apache.catalina.session.StandardManager
pathname
换句话说,这将禁用标准Tomcat功能以通过服务器重新启动来维持会话。
如何在带有嵌入式Tomcat的Spring Boot中实现相同的目标?
也许可以通过某种方式获得Manager对象以将属性路径名设置为null?
您可以使用TomcatContextCustomizer访问管理器并应用必要的配置:
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; }