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