分布式session共享问题解决方案——springsession的使用
官方文档
改文章是springboot 下的分布式session共享解决方案
spring session 是分布式session共享问题的解决方案,本文选择将session保存在redis里面,因此需要先配置redis
注意
- 将对象存储在redis里需要先序列化
- 多个微服务,应该都配置springsession,并且共同的session值对象应当放在公共模块中,这样不同域名才能都取出来session
- 不同微服务的spring session相关配置应该共享
导入依赖
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
启动类添加注解
添加配置类
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 MyConfig {
/**
* session 共享的作用域
* @return
*/
@Bean
public CookieSerializer cookieSerializer() {
DefaultCookieSerializer cook = new DefaultCookieSerializer();
// session 作用域,为了保证共享,应该尽可能的大
cook.setDomainName("mail.com");
cook.setCookieName("MAILSESSION"); // cookie名
return cook;
}
/**
* 需要配置redis序列化
* @return
*/
@Bean
public RedisSerializer<Object> springSessionDefaultRedisSerializer() {
return new GenericJackson2JsonRedisSerializer();
}
}
之后,正常添加session即可