SpringSession介绍
在这个微服务,分布式的时代,很多传统的实现方案变的不再那么适用,比如传统的web服务将session放在内存中的情况,当web服务做水平扩展部署的时候,session共享就成了需要处理的问题。目前有很多成熟的技术可供我们选择,下面简单介绍最近用到的spring-boot+spring-session实现session共享的方案。
SpringSession依赖Redis、session的key和value都存放在redis中、依赖cookie实现,
原理:浏览器第一次请求微服务,微服务随机生成一个sessionid、存放在redis中、并把这个sessionid存放在浏览器中的cookie传回到浏览器、下次浏览器请求任何微服务都会携带这个cookie值去redis中匹配。
缺点:(由于cookie不能跨域只能跨端口、故需要把所有微服务部署在同一个服务器中、或使用网关代理)
一、引入依赖
<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>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
二、添加Session配置类
@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 86400*30)
public class SessionConfig {
}
maxInactiveIntervalInSeconds: 设置 Session 失效时间,使用 Redis Session 之后,原 Spring Boot 的 server.session.timeout 属性不再生效。
三、添加Controller测试
@RestController
public class SessionController {
@RequestMapping("/sesesion")
public String uid(HttpSession session) {
session.setAttribute("name", "管理员");
return session.getId();
}
}