使用SpringSession+Redis实现共享Session以及使用Fegin调用导致Session丢失的问题

一、Session 共享

在分布式微服务中,经常会部署集群服务,如果我们在8001服务登陆了,如果使用SpringSessing在8002服务、8003服务的时候就不需要再次登陆啦。

导入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
</dependency>

yml

配置springsession和redis配置

spring:
	session:
	    store-type: redis
	redis:
	    host: 116.62.13.104

启动类

使用@EnableRedisHttpSession注解开启session共享
在这里插入图片描述

如果连接不上redis,设置以下配置并重启

redis-cli
CONFIG SET protected-mode no

在这里插入图片描述

主启动类添加@EnableSpringHttpSession注解

@EnableEurekaClient
@SpringBootApplication
//Fegin
@EnableFeignClients
//开启session共享
@EnableSpringHttpSession
public class UserApplication {
   
   
    public static void main(String[] args) {
   
   
        SpringApplication.run(UserApplication.class);
    }
    @Bean
    public BCryptPasswordEncoder encoder(){
   
   
        return new BCryptPasswordEncoder();
    }
}

测试

在8001服务登录以后
在这里插入图片描述
Redis 中的用户信息
在这里插入图片描述

8002服务不需要登陆就可以执行
在这里插入图片描述
8003服务不需要登陆就可以执行
在这里插入图片描述
如果8001退出登录了以后
在这里插入图片描述

再次调用8002、8003的方法就会被踢出
在这里插入图片描述
在这里插入图片描述

Bug 使用Fegin调用Session失效

在这里插入图片描述
8001登陆认证
在这里插入图片描述
使用Fegin负载均衡调用Dept8002、Dept8003
在这里插入图片描述
在这里插入图片描述
原因:
微服务使用feign相互之间调用时,存在session丢失
解决方法:
编写一个拦截器来实现Header的传递,也就是需要实现RequestInterceptor接口。
com.lsh.service是Fegin调用其他服务的包路径

@Configuration
@EnableFeignClients(basePackages = "com.lsh.service")
public class FeignRequestIntercepter implements RequestInterceptor {
   
   
    @Override
    public void apply(RequestTemplate requestTemplate) {
   
   
        //通过RequestContextHolder获取本地请求
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Liu_Shihao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值