Struts2严重的安全问题



我正在使用struts2, hibernate和spring,并使用模型驱动模式。这似乎有一个严重的问题,当试图获取一个对象与2个不同的用户和会话(也不同的计算机)在同一时间。

更多信息…假设我们有一个Project对象,它有两个成员——user和name。两个用户都将尝试获取他们的Project对象(当然,对于不同的用户,这是不同的对象)。因此,用户A的项目id为498,用户B的项目id为499。

struts动作将识别他们试图获取具有不同ID的对象,但似乎两个用户都有相同的项目对象实例,因此他们看到相同的结果。您可以在这里提供的日志中看到:

2011-12-08 14:07:21 LoginInterceptor [INFO] User 17正在调用populateProject, params: id=499日志示例2011-12-08 14:07:21 LoginInterceptor [INFO] User 4调用populateProject, params: id=4982011-12-08 14:07:21 ProjectAction [INFO]对象:hbn。Project@e2df60d,会话用户Id为17,obj.user.id为42011-12-08 14:07:21 ProjectAction [INFO]对象:hbn。Project@e2df60d, Session User Id为4,obj.user.id为4

我怎么解决它?

谢谢,罗恩。

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

在上面的例子范围是singleton,这是问题的原因,因为两个用户有相同的动作对象通过弹簧由于singleton scope。设置scope=prototype解决了问题

更多细节请参考官方插件页面

Struts2-Spring插件

相关内容

  • 没有找到相关文章

最新更新