springSession解决微服务session共享问题

硅谷探秘者 Md 框架 1444 0 0

一、创建项目

创建两个项目projectA,projectB

二、pom文件相同

<parent>
        <artifactId>springSession</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis-reactive</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
</dependencies>

三、配置文件相同,除端口外

server:
  port: 8801
  servlet:
    context-path: /
spring:
  redis:
    host: 192.168.183.131
    port: 6379
    password: 123456
    database: 0

四、Controller控制器相同

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpSession;

@RestController
public class TestPAController {

    @GetMapping("set")
    public String set(HttpSession session,String value){
        session.setAttribute("name",value);
        return "ok";
    }


    @GetMapping("get")
    public String set(HttpSession session){
        String value = (String)session.getAttribute("name");
        return value;
    }
}

此时在一个项目中调用set方法,在另一个项目调用get方法就能实现session共享,例如:
http://localhost:8801/set?value=zhejiushi
http://localhost:8802/get

五、配置context-path

在配置文件中配置context-path会使session共享失效例如:

server:
  port: 8801
  servlet:
      context-path: /pa

访问:
http://localhost:8801/pa/set?value=zhejiushi
http://localhost:8802/pb/get
此时则无法实现session共享

原因:cookie所在目录不同

项目A所在目录是pa,项目b所在目录是pb。

解决方法将两个项目的cookie的所在目录设置成根目录(/)就可以了

六、配置

在两个项目中都添加如下配置类:

   @Bean
    public CookieSerializer cookieSerializer() {
        DefaultCookieSerializer serializer = new DefaultCookieSerializer();
        serializer.setCookieName("SESSION");
        serializer.setCookiePath("/");
        serializer.setDomainNamePattern("^.+?\\.(\\w+\\.[a-z]+)$");
        return serializer;
}

重启项目就解决了。


评论区
请写下您的评论...
暂无评论...
猜你喜欢
weblog 6611 架构到分布式/集群的演变在传统的单架构中,一般来说,只有一个器,那么不存在Session,但是在分布式/集群项目中,Session则是一个必须面对的。在这样的集群架构中
框架 5492 springmvc项目中,如一个项目的页面调用另一个项目的接口会产生跨域403。对于一个接口而言很好跨域,springmvc中只需要在接口上加一个注。@CrossOrigin
算法基础,linux 4642 描述springboot项目在跨域名调用接口,并且需要传自定义的请求头时报错:AccesstoXMLHttpRequestat'http://ydatestapi.libawall.com
weblog 8521 什么是跨域?要了跨域,先要说说同源策略。同源策略是由Netscape公司提出的一个著名的安全策略,所有支持JavaScript的浏览器都会使用这个策略。所谓同源是指,域名,协议,端口相同。当页面在
数据结构与算法 1847 约瑟夫环描述有m个人,围成一个环,编号为1、2、3、、、m,从第一个人开始循环报数(从1开始数),假设数到n的那个人出局,然后从下一个人继续数数(从1开始数),数到n出列,以此循环,最后那个人为
java基础 7638 多线程带来的:线程有时候回和其他线程一些资源,比如内存、数据库等。当多个线程同时读写同一份资源的时候,可能会发生冲突。这时候,我们就需要引入线程“同步”机制,即各位线程之间要有顺序使用
算法基础 1392 要做多机数据,通常可以存在数据库或者redis里面。而jwt不需要。无状态jwt不在端存储任何状态。RESTfulAPI的原则之一是无状态,发出请求时,总会返回带有参数的响应,不会产生附加影响。
框架 4465 shiroajax访拦截返回json串在shiro自定义拦击的时候一般会继承AuthorizationFilter类重写isAccessAllowed()方法。该方法会根据我们自定义的规则通过
归档
2018-11  12 2018-12  33 2019-01  28 2019-02  28 2019-03  32 2019-04  27 2019-05  33 2019-06  6 2019-07  12 2019-08  12 2019-09  21 2019-10  8 2019-11  15 2019-12  25 2020-01  9 2020-02  5 2020-03  16 2020-04  4 2020-06  1 2020-07  7 2020-08  13 2020-09  9 2020-10  5 2020-12  3 2021-01  1 2021-02  5 2021-03  7 2021-04  4 2021-05  4 2021-06  1 2021-07  7 2021-08  2 2021-09  8 2021-10  9 2021-11  16 2021-12  14 2022-01  7 2022-05  1 2022-08  3 2022-09  2 2022-10  2 2022-12  5 2023-01  3 2023-02  1 2023-03  4 2023-04  2 2023-06  3 2023-07  4 2023-08  1 2023-10  1 2024-02  1 2024-03  1 2024-04  1 2024-08  1
标签
算法基础 linux 前端 c++ 数据结构 框架 数据库 计算机基础 储备知识 java基础 ASM 其他 深入理解java虚拟机 nginx git 消息中间件 搜索 maven redis docker dubbo vue 导入导出 软件使用 idea插件 协议 无聊的知识 jenkins springboot mqtt协议 keepalived minio mysql ensp 网络基础 xxl-job rabbitmq haproxy srs 音视频 webrtc javascript 加密算法
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。