引入JAR
<dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency>
配置session 启动以及配置超时
import org.springframework.beans.factory.annotation.Value; import javax.annotation.PostConstruct; import java.time.Duration; import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; import org.springframework.context.annotation.Configuration; import org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration; @Configuration @EnableRedisHttpSession public class RedisSessionConfig extends RedisHttpSessionConfiguration { @Value("${server.servlet.session.timeout}") private String timeout; @PostConstruct public void redisSessionConfig() { //Duration类型时间转成秒 long seconds = Duration.parse(timeout).getSeconds(); this.setMaxInactiveIntervalInSeconds((int) seconds); } }
注:
@EnableRedisHttpSession 配置redis-session生效
我配置的会话的timeout采用Duration格式的时间,也可以直接配置秒数字,自己处理就行。
springboot session配置:
spring: session: store-type: redis redis: host: localhost port: 6379 timeout: 1000 jedis: pool: max-active: 100 max-wait: 10 max-idle: 10 min-idle: 10 database: 0
springboot-server.servlet.session.cookie以及超时时间配置
server: port: 8080 servlet: context-path: /projectname session: timeout: PT30M cookie: http-only: false path: /
注:server.servlet.session.timeout=PT30M 是springboot2+ 配置内存session管理的超时设置,redis配置这个沿用了此配置,放在哪里都可以,自己取用时候注意下就行。
如果多项目公用session,且项目名不一样的情况,注意配置cookie的path,session的作用范围好像是这个。