在运行应用程序的多个负载平衡实例时,是否可以防止会话的并发修改?春季会话 - 防止会话的并发修改
上下文:多个tomcat,全部运行相同的应用程序。该应用程序使用spring会话将会话存储在redis集群中。负载均衡器将传入的请求分发给其中一个tomcats(非粘性)。用户点击按钮,tomcat 1非常缓慢地处理请求(性能问题或其他)。用户再次点击按钮,tomcat 2更快并回复成功。用户转到下一页。 Tomcat 1完成第一个请求并覆盖会话 - 所有正在进行的页面的数据都将丢失。
解决方案是锁定会话。从而tomcat 2可以检测到并发修改并回复一个错误(比获得不一致的状态好得多)。
THX很多 AB
Thx很多Vedran。一些言论: 禁用按钮将不会解决问题,因为用户仍然可以点击“F5”,或者使用多个浏览器窗口。 我没有找到一个合适的机制来处理任何SessionRepository我的问题 - 反正RedisOperationsSessionRepository绝对不解决问题。 使用CSRF保护标记是检测并发修改的一个非常有趣的想法。我会试一试。 – user7252656