spring boot之Spring session配置
一.為什麼要spring-session
在傳統單機web應用中,一般使用tomcat/jetty等web容器時,使用者的session都是由容器管理。瀏覽器使用cookie中記sessionId,容器根據sessionId判斷使用者是否存在會話session。這裡的限制是,session儲存在web容器中,被單臺伺服器容器管理。
但是網站主鍵演變,分散式應用和叢集是趨勢(提高效能)。此時使用者的請求可能被負載分發至不同的伺服器,此時傳統的web容器管理使用者會話session的方式即行不通。除非叢集或者分散式web應用能夠共享session,儘管tomcat等支援這樣做。但是這樣存在以下兩點問題:
需要侵入web容器,提高問題的複雜 。web容器之間共享session,叢集機器之間勢必要互動耦合
基於這些,必須提供新的可靠的叢集分散式/叢集session的解決方案,突破traditional-session單機限制(即web容器session方式,下面簡稱traditional-session),spring-session應用而生。
Spring Session使得支援叢集會話變得微不足道,而不依賴於特定於應用程式容器的解決方案。它還提供透明整合:
HttpSession
- 允許以應用程式容器(即Tomcat)中立方式替換HttpSession,支援在標頭檔案中提供會話ID以使用RESTful API
WebSocket
- 提供在接收WebSocket訊息時保持HttpSession活動的能力
WebSession
- 允許以應用程式容器中立方式替換Spring WebFlux的WebSession
jar包
<!-- cache 統一管理快取類似JPA--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-cache</artifactId> </dependency> <!--redis--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!--spring-session--> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency>
main方法配置
主要是@EnableCaching 其它為優化參考
@SpringBootApplication
//將hibernate在一個單獨的執行緒中執行
@EnableJpaRepositories(bootstrapMode = BootstrapMode.DEFERRED)
@EnableAsync
@EnableCaching
@EnableTransactionManagement
public class WebApplication {
public static void main(String[] args) {
SpringApplication.run(WebApplication.class, args);
}
}
yml檔案配置
其它都是預設配置如需修改自己新增
#redis
redis:
host:#預設為localhost
password: #預設為空
timeout: PT30M #30分鐘
#spring-session
session:
store-type: redis
timeout: PT30M
spring-boot配置完成就是怎麼簡單
@GetMapping("query")
@ResponseBody
public String query(HttpServletRequest request) {
HttpSession session = request.getSession();
session.setAttribute("hello","123123123");
return String.valueOf(session.getAttridbute("hello"));
}
由spring session 攔截session進行處理
使用redisManger檢視儲存到redis成功