在 Tomcat 中,conf/context.xml
中有一个众所周知的配置选项来禁用 session 持久性:
<!-- Uncomment this to disable session persistence across Tomcat restarts -->
<Manager pathname="" />
如此处所示取消注释时,org.apache.catalina.Manager
的应用实现(例如 org.apache.catalina.session.StandardManager
)没有pathname
告诉它将 session 存储到磁盘的位置,因此它不会将 session 文件写入磁盘(例如在关机时),这正是我们想要的。
换句话说,这会禁用标准 Tomcat 功能以通过服务器重启来维持 session 。
如何在带有嵌入式 Tomcat 的 Spring Boot 中实现同样的功能?
也许可以通过某种方式获取 Manager 对象以将属性路径名设置为 null?
最佳答案
您可以使用 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;
}
关于tomcat - 如何通过管理器路径名在 Spring Boot 中禁用 Tomcat session 持久性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27130157/