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
4363
单服务架构到分布式/集群的演变在传统的单服务架构中,一般来说,只有一个服务器,那么不存在Session共享问题,但是在分布式/集群项目中,Session共享则是一个必须面对的问题。在这样的集群架构中
框架
4429
springmvc项目中,如一个项目的页面调用另一个项目的接口会产生跨域问题403。对于一个接口而言很好解决跨域问题,springmvc中只需要在接口上加一个注解。@CrossOrigin
算法基础,linux
1931
问题描述springboot项目在跨域名调用接口,并且需要传自定义的请求头时报错:AccesstoXMLHttpRequestat'http://ydatestapi.libawall.com
weblog
6141
什么是跨域?要了解跨域,先要说说同源策略。同源策略是由Netscape公司提出的一个著名的安全策略,所有支持JavaScript的浏览器都会使用这个策略。所谓同源是指,域名,协议,端口相同。当页面在
数据结构与算法
662
约瑟夫环问题描述有m个人,围成一个环,编号为1、2、3、、、m,从第一个人开始循环报数(从1开始数),假设数到n的那个人出局,然后从下一个人继续数数(从1开始数),数到n出列,以此循环,最后那个人为
blog
线程的同步问题
java基础
6429
多线程带来的问题:线程有时候回和其他线程共享一些资源,比如内存、数据库等。当多个线程同时读写同一份共享资源的时候,可能会发生冲突。这时候,我们就需要引入线程“同步”机制,即各位线程之间要有顺序使用
blog
jwt的优缺点和适用场景
算法基础
341
要做多机数据共享,通常可以存在数据库或者redis里面。而jwt不需要。无状态jwt不在服务端存储任何状态。RESTfulAPI的原则之一是无状态,发出请求时,总会返回带有参数的响应,不会产生附加影响。
框架
2839
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
标签
算法基础
linux
前端
c++
数据结构
框架
数据库
计算机基础
储备知识
java基础
ASM
其他
深入理解java虚拟机
nginx
git
消息中间件
搜索
maven
redis
docker
dubbo
vue
导入导出
软件使用
idea插件
协议
无聊的知识
jenkins
springboot
mqtt协议
keepalived