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();
}
}