spring cloud+spring session实现session共享

为什么要使用session共享

在使用spring cloud进行微服务开发时,我们会将一个大的系统拆分为多个微服务系统,为了让这个么多的微服务系统协调工作,我们会使用负载均衡进行响应。这时就会出现一个问题,如果你的系统需要用户信息在各个服务中通用时,由于各个微服务是独立的(相互独立却又协调工作),就会出现用户访问后的session不共享,每一个微服务都会各有一个不同的session,因此为了满足,用户访问后信息在系统中通用就不得不实现session共享

session共享原理

根据session的定义我们知道,session是存放到服务端的,由于每一个微服务服务端相互独立,因此每一个微服务为用户提供的session都是不一样的,如果我们将session提取到公共的地方进行存储,每一个微服务需要session时都从这个存储地进行提取,那么不就实现session共享了吗?
如此我们需要进行一下几步:
1、替代servlet默认存储session方式
2、替代服务端存储session方式

了解原理之后我们就可以找到对应的解决方案了,在此我们使用spring session和redis替代传统的session存储获取方式

解决方案

1、引入依赖



    org.springframework.session
    spring-session-data-redis

2、配置redis

spring:
  #### 配置redis
  redis:
    port: 6379
    host: 192.168.72.129
    password:
    jedis:
      pool:
        max-active: 8
        max-idle: 8
        max-wait: -1ms
        min-idle: 0
    database: 2

3、告知spring将session存储地

方案1:在配置文件中加入
spring.session.store-type=redis

方案2:在springboot自带的启动类上加注解
@EnableRedisHttpSession

你可能感兴趣的:(springcloud)