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 # 配置名称