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