首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >spring session -防止并发修改会话

spring session -防止并发修改会话
EN

Stack Overflow用户
提问于 2016-12-05 23:26:52
回答 1查看 901关注 0票数 0

在运行应用程序的多个负载平衡实例时,是否可以防止并发修改会话?

上下文:多个tomcats,都运行相同的应用程序。该应用程序使用spring session将会话存储在redis集群中。负载均衡器将传入的请求分发给其中一个tomcats (非粘性的)。用户点击Button,Tomcat1处理请求的速度非常慢(性能问题或其他问题)。用户再次点击Button,tomcat 2的速度会快得多,并回复成功。用户进入以下页面。Tomcat 1完成第一个请求并覆盖会话-所有后续页面的数据都会丢失。

一种解决方案是锁定会话。因此,Tomcat2可以检测到并发修改并回复错误(比获得不一致的状态要好得多)。

Thx很多AB

EN

回答 1

Stack Overflow用户

发布于 2016-12-06 17:43:38

Spring Session不使用任何会话锁定机制,因为这会对性能产生非常负面的影响。请注意,您的示例侧重于单个会话,而锁定将影响属于给定会话的所有请求,其中许多请求在并发执行时是完全安全的。

对于示例中的场景,应该使用另一种机制来提供保护。这可以是一些简单的事情,比如禁用UI上的按钮,直到操作完成,从而阻止后续请求,或者使用CSRF保护,这将确保修改服务器端的每个请求。

还请注意,Spring session提供的大多数会话存储库实现都提供了写操作的优化,其目标是减少竞争条件-这包括在保存之前检查会话的修改,以及在某些情况下仅写入已更改的属性的优化保存操作。由于底层数据存储的性质不同,这在每个会话存储库中的处理方式都不同,因此请检查您选择的存储库中的SessionRepository#save实现。

可能有些相关,Spring Session提供了与Spring Security的并发会话控制的集成,从release 1.3.0开始(在写这篇文章的时候,是在发布候选阶段)。您可以查看reference manual以了解详细信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40977635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档