SpringBoot:Spring Session共享session(适合同域名不同上下文路径)

概述

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   # 连接池中的最小空闲连接

也可以达到上面的效果


原文出处:/show_1EF5w5zRIsA2.html