Spring Session共享session(适合二级域名不同)

介绍

Spring Session共享session(适合同域名不同上下文路径) 文中的方法,只适合2个服务 域名相同、上下文路径 不相同,如下:

http://localhost:8080/test/set
http://localhost:8081/get

二级域名不同

如 美团网:

根域名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值相同


原文出处:/show_1EF5w74H9et2.html