Struts 2 tomcat请求/会话污染

时间:2014-10-13 14:27:12

标签: spring tomcat struts2

我正在使用Struts 2 v 2.3.16.3和tomcat 6。

用户将单击按ID查找对象的操作,页面将显示该对象。我遇到了一个零星的错误,用户将突然从另一台机器上的另一个用户获取另一个查找的id。因此,他们有效地调用相同的操作,但将不同的id传递给请求,但最终都会查看相同的ID。

这显然是灾难性的,数据完全被破坏,因为用户都认为他们正在编辑不同的记录。任何想法如何确保会话/请求活动对每个会话安全?

我也在使用spring并在我的Service层中使用@Transactional注释,它返回DAO中的对象。我需要对此注释做些什么才能使每个会话都安全吗?

我正在使用org.springframework.orm.hibernate3.HibernateTransactionManager

1 个答案:

答案 0 :(得分:1)

Classic Thread-UnSafe问题。

自从你提名Spring之后,我的第一个猜测是你没有在Spring xml配置中为你的动作bean指定正确的范围。

确保使用scope="prototype",否则Spring的默认范围是Singleton,并且您不需要Action的单个(ton)实例,而不是ThreadLocal(和因此ThreadSafe)了。

如果不是这样,它可能是something on an Interceptor(与行动不同,不是线程安全),或者您使用的是static(在您的Business / DAO层中,或者在行动本身)应该不是。