介绍
Spring Session共享session(适合同域名不同上下文路径) 文中的方法,只适合2个服务 域名相同、上下文路径 不相同,如下:
http://localhost:8080/test/set
http://localhost:8081/get
二级域名不同
如 美团网:
- https://bj.meituan.com/ : 北京美团
- https://sh.meituan.com/ :上海美团
根域名meituan.com相同,前缀不同,此时无法共享session
验证
修改host文件,该文件是ip和域名的配置文件,通过localhost能够访问127.0.0.1,就是通过该配置文件实现的
windows
将 c:\windows\system32\drivers\etc\hosts文件复制到桌面,在末尾增加如下:
127.0.0.1 bj.myblog.com
127.0.0.1 sh.myblog.com
mac
备份/etc/hosts文件:
cp /etc/hosts /etc/hosts.bak
通过vim修改:
sudo vim /etc/hosts
输入登录密码,在末尾增加如下:
127.0.0.1 bj.myblog.com
127.0.0.1 sh.myblog.com
在idea启动服务
配置文件同 Spring Session共享session(适合同域名不同上下文路径)
启动jar
配置文件同 Spring Session共享session(适合同域名不同上下文路径)
执行命令:
java -jar xxx.jar
访问 http://bj.myblog.com:8080/set
如下:
访问 http://sh.myblog.com:8080/get
如下:
结论
由于cookie中的Domain不同,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);
cookieSerializer.setUseBase64Encoding(false);
return cookieSerializer;
}
}
代码cookieSerializer.setDomainNamePattern("^.+?\\.(\\w+\\.[a-z]+)$"); 通过正则表达式,只保留一级域名
代码cookieSerializer.setDomainName("myblog.com");也可以,但将 域名 写死在代码中,域名更换,此处代码也要做修改,不够通用
在idea启动服务
配置文件如下:
server:
port: 8080
servlet:
session:
timeout: 30m
spring:
redis:
host: 106.13.12.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 # 连接池中的最小空闲连接
启动jar
同级目录创建application.yml配置文件,内容如下:
server:
port: 8081
servlet:
session:
timeout: 30m
spring:
redis:
host: 106.13.12.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 # 连接池中的最小空闲连接
执行命令:
java -jar xxx.jar
访问 http://bj.myblog.com:8080/set
如下:
访问 http://sh.myblog.com:8080/get
如下:
结论
cookie中的Domain相同,都是.myblog.com,SESSION值相同



