Spring Session - 使用自定义 Cookie 的 WebFlux
本指南描述如何配置 Spring Session 在基于 WebFlux 的应用程序中使用自定义 cookie。本指南假设你已经使用所选的数据存储在项目中设置了 Spring Session。例如,将 HttpSession 与 Redis 结合使用。
你可以在 WebFlux 自定义 Cookie 示例应用程序 中找到完整的指南。
Spring Boot 配置
设置好 Spring Session 后,你可以通过将 WebSessionIdResolver 暴露为 Spring bean 来自定义会话 cookie 的写入方式。Spring Session 默认使用 CookieWebSessionIdResolver。当你使用 @EnableRedisHttpSession 等配置时,将 WebSessionIdResolver 暴露为 Spring bean 会增强现有配置。以下示例展示了如何自定义 Spring Session 的 cookie:
@Bean
public WebSessionIdResolver webSessionIdResolver() {
CookieWebSessionIdResolver resolver = new CookieWebSessionIdResolver();
resolver.setCookieName("JSESSIONID"); 1
resolver.addCookieInitializer((builder) -> builder.path("/")); 2
resolver.addCookieInitializer((builder) -> builder.sameSite("Strict")); 3
return resolver;
}
我们将 cookie 的名称自定义为
JSESSIONID。我们将 cookie 的路径自定义为
/(而不是上下文根的默认值)。我们将
SameSitecookie 指令自定义为Strict。
webflux-custom-cookie 示例应用程序
本节描述如何使用 webflux-custom-cookie 示例应用程序。
运行 webflux-custom-cookie 示例应用程序
你可以通过获取源代码并运行以下命令来启动示例:
$ ./gradlew :spring-session-sample-boot-webflux-custom-cookie:bootRun
要使示例正常工作,你必须在 localhost 上安装 Redis 2.8+ 并以默认端口(6379)运行。或者,你可以更新 RedisConnectionFactory 以指向 Redis 服务器。另一个选择是使用 Docker 在 localhost 上运行 Redis。详细说明请参阅 Docker Redis 仓库。
现在你应该可以通过 localhost:8080/ 访问该应用程序了。
探索 webflux-custom-cookie 示例应用程序
现在你可以使用该应用程序了。在表单中填写以下信息:
- 属性名称: username
- 属性值: rob
现在点击 Set Attribute 按钮。你现在应该能在表格中看到显示的值。
如果你查看该应用程序的 cookie,你会发现 cookie 被保存为自定义名称 JSESSIONID。