该版本仍在开发中,尚未被视为稳定。最新稳定版请使用Spring Session 3.5.3spring-doc.cadn.net.cn

春季课程 - 自定义 Cookie

本指南介绍了如何配置 Spring Session 以使用带有 Java 配置的自定义 Cookie。本指南假设你已经在项目中使用你选择的数据存储设置了 Spring Session。例如,使用 Resis 的 HttpSessionspring-doc.cadn.net.cn

你可以在自定义Cookie示例应用中找到完成的指南。

设置好春季会话后,你可以通过公开CookieSerializer作为春季豆。春季课程附带默认Cookie序列化器. 揭露默认Cookie序列化器因为 Spring Bean 在使用以下配置时对现有配置进行了补充@EnableRedisHttpSession. 以下示例展示了如何自定义春季课程的cookie:spring-doc.cadn.net.cn

	@Bean
	public CookieSerializer cookieSerializer() {
		DefaultCookieSerializer serializer = new DefaultCookieSerializer();
		serializer.setCookieName("JSESSIONID"); (1)
		serializer.setCookiePath("/"); (2)
		serializer.setDomainNamePattern("^.+?\\.(\\w+\\.[a-z]+)$"); (3)
		return serializer;
	}
1 我们会自定义 Cookie 的名称为JSESSIONID.
2 我们会自定义 cookie 的路径(而不是上下文根的默认路径)。/
3 我们将域名模式(正则表达式)自定义为^.? \\. (\\w\\。[A-Z]+)$. 这允许跨域和应用共享会话。如果正则表达式不匹配,则不设置域,使用现有域。如果正则表达式匹配,则使用第一个分组作为域。这意味着请求 child.example.com 将域设置为example.com. 然而,向localhost:8080/192.168.1.100:8080/请求时,cookie未被设置,因此在开发中仍然可运行,生产过程中无需更改。
你应仅在有效的域字符上匹配,因为域名会反映在响应中。这样做可以防止恶意用户实施如HTTP响应分拆等攻击。

以下配置选项可供选择:spring-doc.cadn.net.cn

  • cookieName:用来用的饼干名称。 违约:会期.spring-doc.cadn.net.cn

  • 使用SecureCookie: 指定是否应使用安全Cookie。默认:使用值HttpServletRequest.isSecure()在创造时期。spring-doc.cadn.net.cn

  • cookiePath(cookie路径):cookie的路径。默认:上下文根。spring-doc.cadn.net.cn

  • cookieMaxAge: 指定会话创建时 cookie 的最大年龄。 违约:-1,这表示浏览器关闭时应移除该 cookie。spring-doc.cadn.net.cn

  • jvm路线: 指定一个后缀要附加在会话 ID 后并包含在 Cookie 中。用于识别应路由哪个 JVM 以实现会话亲和性。在某些实现(如 Redis 中),该选项不带来性能提升。但它可以帮助追踪特定用户的日志。spring-doc.cadn.net.cn

  • 域名: 允许指定用于 cookie 的特定域名。该选项易于理解,但通常需要开发环境和生产环境之间的不同配置。 看域名模式作为替代方案。spring-doc.cadn.net.cn

  • 域名模式:用于从中提取域名的大小写不区分模式HttpServletRequest#getServerName(). 该模式应提供单一分组,用于提取 cookie 域的值。如果正则表达式不匹配,则不设置域,使用现有域。如果正则表达式匹配,则使用第一个分组作为域。spring-doc.cadn.net.cn

  • 同址同站cookie 指令。以禁用序列化同站Cookie 指令,你可以将此值设置为. 违约:宽松spring-doc.cadn.net.cn

你应仅在有效的域字符上匹配,因为域名会反映在响应中。这样做可以防止恶意用户实施如HTTP响应分拆等攻击。

本节介绍了如何与自定义饼干示例应用。spring-doc.cadn.net.cn

您可以通过获取源代码并调用以下命令来运行示例:spring-doc.cadn.net.cn

$ ./gradlew :spring-session-sample-javaconfig-custom-cookie:tomcatRun
为了让样本正常工作,你必须在localhost上安装Redis 2.8+,并用默认端口(6379)运行。 或者,你也可以更新RedisConnection工厂指向一个Redis服务器。 另一个选择是用 Docker 在 localhost 上运行 Redis。详见 Docker Redis 仓库中的详细说明。

你现在应该可以在localhost:8080/访问该应用了spring-doc.cadn.net.cn

现在你可以使用这个应用程序了。请填写以下信息:spring-doc.cadn.net.cn

现在点击设置属性按钮。 你现在应该能在表格中看到显示的数值。spring-doc.cadn.net.cn

如果你查看应用的 Cookie,可以看到 cookie 保存为自定义名称JSESSIONID.spring-doc.cadn.net.cn