使用Fortify SCA和Struts 2和Spring

时间:2014-12-14 08:26:11

标签: java spring struts2 fortify

我正在使用HP Fortify SCA和Apps 4.20来处理使用Struts2 spring Hibernate的项目。 该报告说我的项目已经

Race Condition: Singleton Member Field 

控制器问题。

但是,Struts2是线程安全的,因为它在新请求到来时创建一个新实例。 此外,我在控制器中设置了弹簧注释

@Controller
@Scope("request")

我不知道如何解决这个问题。 它是否误判,或者我的项目有问题。

2 个答案:

答案 0 :(得分:1)

Struts2是线程安全的,因为它为每个请求创建一个新的动作实例。

但它没有请求作用域。 (如果要在Struts2中实现请求范围策略,可以阅读this问题。)

相反,它为动作实例使用default范围。如果Struts2与Spring集成,则应使用Spring配置定义action bean的范围。默认情况下,spring使用singleton范围。

这可能是您遇到竞争条件问题的根源。因为您访问单件成员字段。

如果您委托Spring管理您的操作bean,那么您应该使用prototype范围。

同样不使用像@Controller这样的Spring-MVC注释,它对Struts2的意义较小。 @Component足以启用DI功能。

答案 1 :(得分:0)

竞争条件可能是由servlet中的实例成员引起的,该成员必须是线程安全的。如果是这种情况,请将违规成员移动到方法以呈现线程安全。