10. 自定义会话存储库

实现自定义SessionRepository API 应该是一项相当简单的任务。将自定义实现与@EnableSpringHttpSession支持耦合在一起,可以轻松地重用现有的 Spring Session 配置工具和基础架构。但是,有几个方面值得我们仔细考虑。

在 HTTP 请求的生命周期中,通常将HttpSession保留到SessionRepository两次。首先,要确保一旦 Client 端访问了会话 ID,该会话就可供 Client 端使用,并且还必须在提交会话之后进行写操作,因为可能会对会话进行进一步的修改。考虑到这一点,通常建议SessionRepository实现跟踪更改,以确保仅保存增量。这在高度并发的环境中尤其重要,在该环境中,多个请求在同一个HttpSession上进行操作,并因此导致竞争状况,其中请求彼此覆盖会话属性的更改。 Spring Session 提供的所有SessionRepository实现都使用所描述的方法来持久化会话更改,并且可以在实现自定义SessionRepository时用作指导。

请注意,相同的建议也适用于实现自定义ReactiveSessionRepository。当然,在这种情况下,应使用@EnableSpringWebSession