練習 - 將 HTTP 工作階段資料儲存在 Redis 中
在此單元中,將 Spring Session 新增至現有的 Spring Boot 應用程式,以將 HTTP 工作階段資料儲存在 Azure Cache for Redis 內。
設定 Spring 工作階段
若要在您的應用程式中新增 Spring 工作階段支援,請在 pom.xml 檔案的
<dependencies>
區段中新增下列相依性:<dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency>
若要設定 Spring Session 以將 Redis 用於工作階段複寫,請將下列行新增至 src/main/resources/application.properties 檔案:
spring.session.store-type=redis
新增控制器以測試工作階段複寫
將新的 Spring MVC REST 控制器新增至您的應用程式,以用於測試工作階段複寫。
在 TodoController 旁邊建立稱為 SessionReplicationController 的新控制器。
package com.example.demo; import org.springframework.context.annotation.Bean; import org.springframework.session.data.redis.config.ConfigureRedisAction; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpSession; @RestController @RequestMapping("/") public class SessionReplicationController { @Bean public static ConfigureRedisAction configureRedisAction() { return ConfigureRedisAction.NO_OP; } @GetMapping("/session") public String session(HttpSession session) { Integer test = (Integer) session.getAttribute("test"); if (test == null) { test = 0; } else { test++; } session.setAttribute("test", test); return "[" + session.getId() + "]-" + test; } }
注意
您可以設定特定的
ConfigureRedisAction.NO_OP
Spring bean,因為 Spring Session 預設會嘗試設定 Redis keyspace 通知,而這不適用於安全的 Azure Cache for Redis 執行個體。 如果您需要 Azure Cache for Redis 的 keyspace 通知,您必須透過 Redis CLI 手動進行套用。Keyspace 通知適用於 WebSocket,但其會耗用更多資源。 目前的案例不會使用 WebSocket,且不應該啟用 keyspace 通知。
重新啟動您的應用程式,以受益於 HTTP 工作階段複寫。
測試工作階段複寫
HTTP 工作階段是使用者專屬的,可透過 Cookie 進行維護。 您可以使用下列任一方法來測試工作階段是否正常運作:
將瀏覽器指向
http://localhost:8080/session
並重新載入頁面數次。執行下列命令列數次:
curl -b cookie.txt -c cookie.txt http://127.0.0.1:8080/session
上述命令會將 Cookie 儲存在名為 cookie.txt 的檔案中。
任一種方法都會產生輸出,以顯示 HTTP 工作階段識別碼,而其數字會在每個要求之後遞增,如下列範例所示:
若要檢查是否已正確保存工作階段,您可以重新啟動伺服器,並確認工作階段資料並未遺失。
在下一個單元中,您會將應用程式部署至雲端,以及本機電腦與雲端服務之間的叢集 HTTP 工作階段。