SpringBoot:Spring Session共享session(适合同域名不同上下文路径) 作者:马育民 • 2020-07-21 22:41 • 阅读:10204 # 概述 [Spring Session共享session(适合同域名同上下文路径)](https://www.malaoshi.top/show_1EF5viw1JaWt.html "Spring Session共享session(适合同域名同上下文路径)") 文中的方法,只适合2个服务 **域名相同**、**上下文路径相同**,如下: ``` http://192.168.1.100:8080/bookmanager http://192.168.1.100:8081/bookmanager ``` ### 域名相同,上下文路径不同 如拉勾网: - https://www.lagou.com/beijing/ :北京站 - https://www.lagou.com/shanghai/ :上海站 看下面两个服务: ``` http://localhost:8080/test/set http://localhost:8081/get ``` 这2个服务,就是域名相同,上下文路径不同,这种是 **无法共享session的** # 验证无法共享session 验证 [Spring Session共享session(适合同域名同上下文路径)](https://www.malaoshi.top/show_1EF5viw1JaWt.html "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 [![](https://www.malaoshi.top/upload/pic/springsession/QQ20200722-173257.png)](https://www.malaoshi.top/upload/pic/springsession/QQ20200722-173257.png) - `value`值不同 - `Path`是`/test/` ### 访问8081 [![](https://www.malaoshi.top/upload/pic/springsession/QQ20200722-173324.png)](https://www.malaoshi.top/upload/pic/springsession/QQ20200722-173324.png) - `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 [![](https://www.malaoshi.top/upload/pic/springsession/QQ20200722-204511.png)](https://www.malaoshi.top/upload/pic/springsession/QQ20200722-204511.png) Path变成:`/` ### 访问8081 [![](https://www.malaoshi.top/upload/pic/springsession/QQ20200722-204623.png)](https://www.malaoshi.top/upload/pic/springsession/QQ20200722-204623.png) 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 # 连接池中的最小空闲连接 ``` 也可以达到上面的效果 原文出处:http://malaoshi.top/show_1EF5w5zRIsA2.html