tomcat - 如何通过管理器路径名在 Spring Boot 中禁用 Tomcat session 持久性?

标签 tomcat spring-boot

在 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/

相关文章:

带有 OAuth2 丢失 session 的 Spring Security

java - 如何只允许一个 Activity 的 @Async 任务?

java - 如何在 Spring @Scheduled 中使用cron 表达式在每个月的第一个星期一解雇工作?

apache - 瑞士法郎限制

hibernate.jpa.HibernatePersistenceProvider 无法转换为 javax.persistence.spi.PersistenceProvider

http - 拆分 HTTP 和仅 TCP(非 HTTP)流量

java - 使用 Spring Boot 和 Spring Data JPA 的 CriteriaQuery 中出现空指针异常

java - Tomcat 7 的 CA 证书安装过程

apache - 使用 SetEnvIf 根据 SSL_CLIENT_M_SERIAL 值更改变量

maven - Tomcat 8 war 部署 LifecycleException : Failed to start component