Spring Session 是 Spring 的项目之一。Spring Session 提供了一套创建和管理 Servlet
HttpSession 的方案,默认采用外置的 Redis 来存储 Session 数据,以此来解决 Session 共享的
问题。(springsession储存session数据的方式有很多,我们常见使用redis)
实现步骤:
1.导包
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
2.配置
spring:
session:
store-type: redis # springsession使用redis类型
3.开启 redis作为session的储存
@EnableRedisHttpSession //开启整合redis作为session的储存
在经过以上的操作之后我们在想session储存数据,就会储存到redis中,但是需要注意的是,默认是使用jdk序列化的方式储存,一般情况为了房方便查看储存的数据我们可以配置储存格式为json。
配置redis储存session的序列化方式为json:
@Configuration
public class SessionConfig {
/**
* 配置redis的序列化方式 我们使用json的方式 之前默认使用二进制序列化
*
* 注入bean对象的名字必须是springSessionDefaultRedisSerializer
* @return
*/
@Bean
public RedisSerializer<Object> springSessionDefaultRedisSerializer(){
return new GenericJackson2JsonRedisSerializer();
}
}
在经过我们上面操作之后,储存session的数据就你能储存到redis中并且是json的格式,但是如果我们在微服务情况下其他服务还是不能获取到session数据,因为我们获取session是根据cookie的jsessionid获取的,在之前的session存储中默认cookie的作用域为当前域名,所以其他服务(其他域名)还是不能获取到session的值,我们需要在储存session的时候,修改cookie的作用域来保证其他服务能访问到session(一般修改为所有的服务为一个公共的域值),修改方式如下:
@Configuration
public class SessionConfig {
/**
* 配置cookie的作用域名
* @return
*/
@Bean
public CookieSerializer cookieSerializer(){
DefaultCookieSerializer defaultCookieSerializer = new DefaultCookieSerializer();
//设置规则 设置作用域
defaultCookieSerializer.setDomainName("xxx.com");
return defaultCookieSerializer;
}
}