概述
Spring Session共享session(适合同域名同上下文路径) 文中的方法,只适合2个服务 域名相同、上下文路径相同,如下:
http://192.168.1.100:8080/bookmanager
http://192.168.1.100:8081/bookmanager
域名相同,上下文路径不同
如拉勾网:
看下面两个服务:
http://localhost:8080/test/set
http://localhost:8081/get
这2个服务,就是域名相同,上下文路径不同,这种是 无法共享session的
验证无法共享session
验证 Spring Session共享session(适合同域名同上下文路径) 文中的方法,当域名相同,上下文路径不同时,无法共享session
修改上下文路径
修改idea工程中application.yml文件,只修改 上下文路径,如下:
server:
port: 8080
servlet:
context-path: /test # 上下文路径
完整配置如下:
server:
port: 8080
servlet:
context-path: /test
spring:
redis:
host: 106.13.15.23
port: 6379
password: pwd
database: 0 # Redis数据库索引(默认为0)
timeout: 5000 # 连接超时时间(毫秒)
jedis:
pool:
max-active: 8 # 连接池最大连接数(使用负值表示没有限制)
pool.max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)
max-idle: 8 # 连接池中的最大空闲连接
min-idle: 0 # 连接池中的最小空闲连接
在idea中启动服务,端口是8080
启动jar服务
jar包同级目录创建配置文件application.yml,内容如下:
server:
port: 8081
spring:
redis:
host: 106.13.15.23
port: 6379
password: pwd
database: 0 # Redis数据库索引(默认为0)
timeout: 5000 # 连接超时时间(毫秒)
jedis:
pool:
max-active: 8 # 连接池最大连接数(使用负值表示没有限制)
pool.max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)
max-idle: 8 # 连接池中的最大空闲连接
min-idle: 0 # 连接池中的最小空闲连接
没有修改上下文路径,端口为8081
执行命令:java -jar xxx.jar
访问8080
value值不同Path是/test/
访问8081
value值不同Path是/
结论
因为2个cookie的Path不同,value值不同,无法共享session
不同上下文路径 共享session
增加配置类
@Configuration
public class Config {
@Bean
public DefaultCookieSerializer getDefaultCookieSerializer() {
DefaultCookieSerializer cookieSerializer = new DefaultCookieSerializer();
// cookieSerializer.setDomainName("mydomain.com");
// cookieSerializer.setDomainNamePattern("^.+?\\.(\\w+\\.[a-z]+)$");
// cookieSerializer.setCookieName("SESSION");
cookieSerializer.setCookiePath("/"); //设置cookie的path为/,即:根路径
// cookieSerializer.setUseBase64Encoding(false);
return cookieSerializer;
}
在idea中启动服务,端口是8080
配置文件同上面的idea工程中的application.yml
启动jar服务
配置文件同上面jar的同级application.yml
在idea中重新打成jar包,并启动:java -jar xxx.jar
访问8080
Path变成:/
访问8081
Path变成:/
不同上下文路径 共享session方式二(不推荐)
在application.yml增加下面配置
server:
port: 8080
servlet:
context-path: /test
session:
timeout: 30m
cookie:
path: / # 将cookie的path修改成/
完整配置文件内容如下:
server:
port: 8080
servlet:
context-path: /test
session:
timeout: 30m
cookie:
path: / # 将cookie的path修改成/
spring:
redis:
host: 106.113.165.23
port: 6379
password: pwd
database: 0 # Redis数据库索引(默认为0)
timeout: 10000 # 连接超时时间(毫秒)
jedis:
pool:
max-active: 8 # 连接池最大连接数(使用负值表示没有限制)
pool.max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)
max-idle: 8 # 连接池中的最大空闲连接
min-idle: 0 # 连接池中的最小空闲连接
也可以达到上面的效果



