展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

redis实现session高可用集群、指定cookie中保存的sessionid名称

  • 当用户在服务器1认证后,服务器1将session存入reis,这时服务器1突然挂了,用户还可以访问服务器2且不用登录,因为服务器2从redis中获取session

  • 配置方式

# core模块中添加依赖
<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>

# web模块中配置yml
spring:
  session:
    store-type: none # session存储方式采用 redis
  redis: # 如果是本地redis可不配置
    port: 6379
  • 实际配置代码
# core模块中添加依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
</dependency>

# web模块中配置yml
spring:
  session:
    store-type: redis # session存储方式采用 redis
  redis:
    database: 1
    host: 127.0.0.1
    port: 6379
    # password: 没有不用写
    lettuce:
      # 连接池配置
      pool:
        # 连接池中的最小空闲连接,默认 0
        min-idle: 0
        # 连接池中的最大空闲连接,默认 8
        max-idle: 8
        # 连接池最大阻塞等待时间(使用负值表示没有限制),默认 -1ms
        max-wait: -1ms
        # 连接池最大连接数(使用负值表示没有限制),默认 8
        max-active: 8
  • 测试:认证后查看redis数据库

  • 认证成功后,sessionid名称为session

  • 原来的sessionid为JSESSIONID

  • 当配置了session会话超时时长,无操作超出设置时长,这时会提示超出时长,刷新则跳转到认证页面

  • 但时这里sessionid的名称不为JSESSIONID,在之前的CustomInvalidSessionStrategy类中,刷新时便不会删除名称为session的sessionid

  • 这里的解决方案是,在之前的CustomInvalidSessionStrategy类中,编写1个删除名称为session的sessionid;或者将redis管理的session的sessionid改为JSESSIONID;这里使用方式2

# yml中配置如下
server:
  port: 80
  servlet:
    session:
      timeout: 1m # session会话超时时间,默认情况 下是30分钟(m),不能小于1分钟
      cookie:
        name: JSESSIONID    # 配置名称
posted @ 2022-06-25 13:34  DogLeftover  阅读(139)  评论(0编辑  收藏  举报