1、SpringSession简介
在传统的web项目中,用户的session都是由容器管理的。用户认证信息保存在服务器的session中,再由服务器返回一个sessionId给用户浏览器中的cookie中,下次访问容器会根据sessionId判断用户是否存在回话session。这里的缺点是:session存储在容器中,被单台服务器的容器管理。
但是在分布式和集群应用中,此时用户的请求可能被负载到不同的服务器,所以传统的容器管理session的方式是行不通的。SpringSession能够完美的解决此问题。
SpringSession将session从web容器中剥离,存储在独立的存储服务器中。目前支持多种形式的session存储器:Redis、Database、MogonDB等。SpringSession包装了原生的HttpSession,当request进入web容器,根据request获取session时,由SpringSession负责存存储器中获取session,如果存在则返回,如果不存在则创建并持久化至存储器中。
2、Springboot中的简单使用
SpringSession结合redis在Springboot中的使用
2.1 引入依赖
<!--引入redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<!--排除spring redis自己整合的lettuce-core-->
<exclusions>
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--上面排除了lettuce-core后 使用jedis-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<!--整合springsession完成session共享问题-->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
2.2 配置
yml配置
spring:
session:
store-type: redis
redis:
host: 192.168.200.139
port: 6379
server:
port: 13000
自定义配置
@Configuration
public class GulimallSessionConfig {
/**
* 设置一级域名:多级域名下可使用共享session
* @return
*/
@Bean
public CookieSerializer cookieSerializer() {
DefaultCookieSerializer defaultCookieSerializer = new DefaultCookieSerializer();
defaultCookieSerializer.setDomainName("gulimall.com");
defaultCookieSerializer.setCookieName("GULISESSION");
return defaultCookieSerializer;
}
/**
* 自定义序列化(json)
* @return
*/
@Bean
public RedisSerializer<Object> springSessionDefaultRedisSerializer() {
return new GenericJackson2JsonRedisSerializer();
}
}
开启SpringSession
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
@EnableRedisHttpSession //开启SpringSession
public class GulimallSearchApplication {
public static void main(String[] args) {
SpringApplication.run(GulimallSearchApplication.class, args);
}
}