Session共享问题解决方案
图片截屏自:https://www.bilibili.com/video/BV1np4y1C7Yf?p=226
第一种,不推荐
第二种,只是一种思想
常用第三种、第四种
SpringSession
环境要求:
将HttpSession存放在Redis
官网:https://docs.spring.io/spring-session/reference/guides/boot-redis.html
基本配置
xml配置:
<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>
yaml配置
spring:
redis:
host: 你的主机
port: 你的端口
session:
store-type: redis #用redis存session数据
server:
servlet:
session:
# 此处配置可能不生效,可通过@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1800)配置超时时间
timeout: 30m #session过期时间
主类标@EnableRedisHttpSession
注解
配置spring session过期时间:
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1800)
,单位是秒
配置cookie、json序列化
配置:
- 配置cookie:https://github.com/spring-projects/spring-session/blob/2.7.0/spring-session-samples/spring-session-sample-javaconfig-custom-cookie/src/main/java/sample/Config.java
- 配置使用json序列化:https://github.com/spring-projects/spring-session/blob/2.7.0/spring-session-samples/spring-session-sample-boot-redis-json/src/main/java/sample/config/SessionConfig.java
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.session.web.http.CookieSerializer;
import org.springframework.session.web.http.DefaultCookieSerializer;
@Configuration
public class SpringSessionConfig {
/**
* 配置cookie
* @return
*/
@Bean
public CookieSerializer cookieSerializer() {
DefaultCookieSerializer serializer = new DefaultCookieSerializer();
serializer.setCookieName("GULIMALL_SESSION");
serializer.setCookiePath("/");
// serializer.setDomainNamePattern("^.+?\\.(\\w+\\.[a-z]+)$");
serializer.setDomainName("gulimall.com");
return serializer;
}
/**
* 使用json序列化
* @return
*/
@Bean
public RedisSerializer<Object> springSessionDefaultRedisSerializer() {
return new GenericJackson2JsonRedisSerializer();
}
}
核心原理