Struts2严重的安全问题?

时间:2011-12-08 12:17:19

标签: struts2 struts2-spring-plugin

我正在使用struts2,hibernate和spring以及使用模型驱动模式。在尝试同时获取具有2个不同用户和会话(也是不同计算机)的对象时,似乎存在严重问题。

更多信息...... 假设我们有一个Project对象,它有2个成员 - 用户和名字。 两个用户都将尝试获取他们的Project对象(当然,这是不同用户的不同对象)。因此,用户A将拥有ID为498的项目,而用户B将拥有ID为499的项目。

struts操作会识别出他们正在尝试获取具有不同ID的对象,但似乎两个用户都具有相同的Project对象实例,因此他们看到相同的结果。 您可以在此处提供的日志中看到:

2011-12-08 14:07:21 LoginInterceptor [INFO]用户17正在调用populateProject,params:id = 499 2011-12-08 14:07:21 LoginInterceptor [INFO]用户4正在调用populateProject,params:id = 498 2011-12-08 14:07:21 ProjectAction [INFO] Obj:hbn.Project@e2df60d,会话用户ID为17,obj.user.id为4 2011-12-08 14:07:21 ProjectAction [INFO] Obj:hbn.Project@e2df60d,会话用户ID为4,obj.user.id为4

我怎么解决?

谢谢, 罗恩。

1 个答案:

答案 0 :(得分:3)

根据讨论,我发布了问题和解决方案的原因。 没有为spring插件创建的操作设置范围,默认情况下它们的范围为singleton。 在struts2中,每个操作也可以作为域对象使用,因此Struts2总是为每个请求创建一个新的操作实例,并将其置于值堆栈中。

在上面的案例范围是singleton,这是问题的原因,因为由于singleton scope两个用户都有春天传递的相同操作对象。设置scope=prototype已解决的问题

有关详细信息,请参阅官方插件页面

Struts2-Spring plugin