Spring Session共享session(适合二级域名不同) 作者:马育民 • 2020-07-22 22:19 • 阅读:10464 # 介绍 [Spring Session共享session(适合同域名不同上下文路径)](https://www.malaoshi.top/show_1EF5w5zRIsA2.html "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(适合同域名不同上下文路径)](https://www.malaoshi.top/show_1EF5w5zRIsA2.html "Spring Session共享session(适合同域名不同上下文路径)") ### 启动jar 配置文件同 [Spring Session共享session(适合同域名不同上下文路径)](https://www.malaoshi.top/show_1EF5w5zRIsA2.html "Spring Session共享session(适合同域名不同上下文路径)") 执行命令: ``` java -jar xxx.jar ``` ### 访问 http://bj.myblog.com:8080/set 如下: [![](https://www.malaoshi.top/upload/pic/springsession/QQ20200722-225653.png)](https://www.malaoshi.top/upload/pic/springsession/QQ20200722-225653.png) ### 访问 http://sh.myblog.com:8080/get 如下: [![](https://www.malaoshi.top/upload/pic/springsession/QQ20200722-225715.png)](http://https://www.malaoshi.top/upload/pic/springsession/QQ20200722-225715.png) ### 结论 由于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 如下: [![](https://www.malaoshi.top/upload/pic/springsession/QQ20200722-231136.png)](https://www.malaoshi.top/upload/pic/springsession/QQ20200722-231136.png) ### 访问 http://sh.myblog.com:8080/get 如下: [![](https://www.malaoshi.top/upload/pic/springsession/QQ20200722-231154.png)](https://www.malaoshi.top/upload/pic/springsession/QQ20200722-231154.png) ### 结论 cookie中的Domain相同,都是`.myblog.com`,`SESSION`值相同 原文出处:http://malaoshi.top/show_1EF5w74H9et2.html