springSession解决微服务session共享问题
一、创建项目
创建两个项目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出列,以此循环,最后那个人为
blog
线程的同步问题
java基础
7638
多线程带来的问题:线程有时候回和其他线程共享一些资源,比如内存、数据库等。当多个线程同时读写同一份共享资源的时候,可能会发生冲突。这时候,我们就需要引入线程“同步”机制,即各位线程之间要有顺序使用
blog
jwt的优缺点和适用场景
算法基础
1392
要做多机数据共享,通常可以存在数据库或者redis里面。而jwt不需要。无状态jwt不在服务端存储任何状态。RESTfulAPI的原则之一是无状态,发出请求时,总会返回带有参数的响应,不会产生附加影响。
框架
4465
shiro解决ajax访问拦截返回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
加密算法
目录
没有一个冬天不可逾越,没有一个春天不会来临。最慢的步伐不是跬步,而是徘徊,最快的脚步不是冲刺,而是坚持。