Spring boot Spring Boot 1.4.0没有将jvmroute附加到jsessionid

Spring boot Spring Boot 1.4.0没有将jvmroute附加到jsessionid,spring-boot,Spring Boot,我们一直在使用tomcat jvmroute属性来支持会话关联(是的,我们希望有一天不再使用它) 当我使用SpringBoot1.3.7时,jvmroute值被附加到jsessionid(仍然使用Tomcat8.x)。但由于某些原因,SpringBoot1.4.0没有 我很确定这不是tomcat的问题,因为即使我降级到tomcat 7,这仍然不起作用。此外,我还调试了ApacheStandardEngine类,可以看到jvmroute属性在Tomcat8.x中的应用。然而,不知何故,在Sprin

我们一直在使用tomcat jvmroute属性来支持会话关联(是的,我们希望有一天不再使用它)

当我使用SpringBoot1.3.7时,jvmroute值被附加到jsessionid(仍然使用Tomcat8.x)。但由于某些原因,SpringBoot1.4.0没有

我很确定这不是tomcat的问题,因为即使我降级到tomcat 7,这仍然不起作用。此外,我还调试了ApacheStandardEngine类,可以看到jvmroute属性在Tomcat8.x中的应用。然而,不知何故,在SpringBoot1.4.0中,jseesionid cookie没有得到正确的值


@SpringBoot应用程序
@RestController
公共类TomcatJvmrouteApplication{

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>demo.tomcat</groupId>
    <artifactId>jvmroute-demo</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>tomcat-jvmroute</name>
    <description>demo jvmroute issues</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.0.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>
publicstaticvoidmain(字符串[]args){
setProperty(“jvmRoute”、“testjvmroute”);
run(TomcatJvmrouteApplication.class,args);
}
@请求映射(“/info”)
公共字符串getInfo(@Value(“${jvmRoute}”)字符串路由,HttpSession会话,
@CookieValue(“JSSessionID”)字符串(cookie){
字符串jsessionId=cookie==null?”:新字符串(cookie.getBytes());
return“Jvmroute应该是:“+route+”
Jsessionid是:“+Jsessionid; }
}

项目pom:

@Bean
public EmbeddedServletContainerCustomizer tomcatCustomizer() {
    return (container) -> {
        if (container instanceof TomcatEmbeddedServletContainerFactory) {
            ((TomcatEmbeddedServletContainerFactory) container).addContextCustomizers((context) -> {
                context.addLifecycleListener((event) -> {
                    if (event.getType().equals(Lifecycle.START_EVENT)) {
                        ((Context) event.getSource()).getManager().getSessionIdGenerator()
                                .setJvmRoute(((ManagerBase) context.getManager()).getJvmRoute());
                    }
                });
            });
        }
    };
}

4.0.0
汤姆猫
JVM路线演示
1.0.0-SNAPSHOT
罐子
tomcat JVM路线
演示JVM路由问题
org.springframework.boot
spring启动程序父级
1.4.0.1发布
UTF-8
UTF-8
1.8
org.springframework.boot
SpringBootStarterWeb
org.springframework.boot
springbootmaven插件

这是spring boot 1.4.0中的一个错误,请参阅此问题:

以下是Andy Wilkinson发布的1.4.0解决方案。只需将这个bean添加到应用程序上下文中

@Bean
public WebServerFactoryCustomizer<TomcatServletWebServerFactory> servletContainer() {
    return (tomcat) -> {

        tomcat.addContextCustomizers((context) -> {
            Manager manager = context.getManager();
            if (manager == null) {
                manager = new StandardManager();
                context.setManager(manager);
            }

            ((ManagerBase) context.getManager()).getEngine().setJvmRoute("tomcatJvmRoute");

        });
    };
}

我使用的是SpringBoot2.0.4。我必须这样做:

@Bean
公共WebServerFactoryCustomizer servletContainer(){
返回(tomcat)->{
tomcat.addContextCustomizers((上下文)->{
Manager=context.getManager();
if(manager==null){
manager=新的StandardManager();
context.setManager(manager);
}
((ManagerBase)context.getManager()).getEngine().setJvmRoute(“tomcatJvmRoute”);
});
};
}

我的原创

您可以尝试使用spring:提交的问题打开一个问题:
@Bean
public WebServerFactoryCustomizer<TomcatServletWebServerFactory> servletContainer() {
    return (tomcat) -> {

        tomcat.addContextCustomizers((context) -> {
            Manager manager = context.getManager();
            if (manager == null) {
                manager = new StandardManager();
                context.setManager(manager);
            }

            ((ManagerBase) context.getManager()).getEngine().setJvmRoute("tomcatJvmRoute");

        });
    };
}