我正在使用HP Fortify SCA和Apps 4.20来处理使用Struts2 spring Hibernate的项目。 该报告说我的项目已经
Race Condition: Singleton Member Field
控制器问题。
但是,Struts2是线程安全的,因为它在新请求到来时创建一个新实例。 此外,我在控制器中设置了弹簧注释
@Controller
@Scope("request")
我不知道如何解决这个问题。 它是否误判,或者我的项目有问题。
答案 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中的实例成员引起的,该成员必须是线程安全的。如果是这种情况,请将违规成员移动到方法以呈现线程安全。