1. 程式人生 > >spring boot之Spring session配置

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成功