|
该版本仍在开发中,尚未被视为稳定。最新稳定版请使用Spring Session 3.5.3! |
春季课程 - 自定义 Cookie
本指南介绍了如何配置 Spring Session 以使用带有 Java 配置的自定义 Cookie。本指南假设你已经在项目中使用你选择的数据存储设置了 Spring Session。例如,使用 Resis 的 HttpSession。
| 你可以在自定义Cookie示例应用中找到完成的指南。 |
Spring Java 配置
设置好春季会话后,你可以通过公开CookieSerializer作为春季豆。春季课程附带默认Cookie序列化器. 揭露默认Cookie序列化器因为 Spring Bean 在使用以下配置时对现有配置进行了补充@EnableRedisHttpSession.
以下示例展示了如何自定义春季课程的cookie:
@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响应分拆等攻击。 |
配置选项
以下配置选项可供选择:
-
cookieName:用来用的饼干名称。 违约:会期. -
使用SecureCookie: 指定是否应使用安全Cookie。默认:使用值HttpServletRequest.isSecure()在创造时期。 -
cookiePath(cookie路径):cookie的路径。默认:上下文根。 -
cookieMaxAge: 指定会话创建时 cookie 的最大年龄。 违约:-1,这表示浏览器关闭时应移除该 cookie。 -
jvm路线: 指定一个后缀要附加在会话 ID 后并包含在 Cookie 中。用于识别应路由哪个 JVM 以实现会话亲和性。在某些实现(如 Redis 中),该选项不带来性能提升。但它可以帮助追踪特定用户的日志。 -
域名: 允许指定用于 cookie 的特定域名。该选项易于理解,但通常需要开发环境和生产环境之间的不同配置。 看域名模式作为替代方案。 -
域名模式:用于从中提取域名的大小写不区分模式HttpServletRequest#getServerName(). 该模式应提供单一分组,用于提取 cookie 域的值。如果正则表达式不匹配,则不设置域,使用现有域。如果正则表达式匹配,则使用第一个分组作为域。 -
同址:同站cookie 指令。以禁用序列化同站Cookie 指令,你可以将此值设置为零. 违约:宽松
| 你应仅在有效的域字符上匹配,因为域名会反映在响应中。这样做可以防止恶意用户实施如HTTP响应分拆等攻击。 |
自定义饼干示例应用
本节介绍了如何与自定义饼干示例应用。
运行自定义饼干示例应用
您可以通过获取源代码并调用以下命令来运行示例:
$ ./gradlew :spring-session-sample-javaconfig-custom-cookie:tomcatRun
为了让样本正常工作,你必须在localhost上安装Redis 2.8+,并用默认端口(6379)运行。
或者,你也可以更新RedisConnection工厂指向一个Redis服务器。
另一个选择是用 Docker 在 localhost 上运行 Redis。详见 Docker Redis 仓库中的详细说明。 |
你现在应该可以在localhost:8080/访问该应用了