2014-12-14 2 views
1

Struts2 spring Hibernate를 사용하는 프로젝트에 HP Fortify SCA 및 Apps 4.20을 사용하고 있습니다. 보고서에 내 프로젝트는 컨트롤러에 문제가 있다고Struts 2 및 Spring에서 Fortify SCA 사용

Race Condition: Singleton Member Field 

입니다.

그러나 Struts2는 새 요청이 들어올 때 새 인스턴스를 만들기 때문에 스레드로부터 안전합니다. 은 또한, 나는이 문제를 해결하는 방법을 모른다 컨트롤러

@Controller 
@Scope("request") 

봄 주석을 설정합니다. 잘못 판단했거나 프로젝트에 문제가 있습니까?

답변

1

Struts2는 요청마다 새 작업 인스턴스를 만들기 때문에 threadsafe입니다.

요청 범위가 아닙니다. Struts2에서 요청 범위 전략을 구현하려는 경우 this 질문을 읽을 수 있습니다.

대신 default 범위를 작업 인스턴스로 사용합니다. Struts2가 Spring과 통합되어 있다면, Spring 설정을 사용하여 정의해야하는 액션 빈의 범위. 기본적으로 스프링은 singleton 범위를 사용합니다.

이것은 경쟁 조건과 관련된 문제의 원인 일 수 있습니다. 싱글 톤 멤버 필드에 접근했기 때문입니다.

작업 bean을 관리하기 위해 Spring에 위임 한 경우 prototype 범위를 사용해야합니다.

또한 @Controller과 같은 Spring-MVC 주석을 사용하지 않으므로 Struts2에 대한 의미가 더 약합니다. @Component은 DI 기능을 사용하기에 충분합니다.

0

레이스 조건은 서블릿의 인스턴스 멤버에 의해 발생할 수 있습니다.이 인스턴스 멤버는 스레드로부터 안전해야합니다. 이 경우, 잘못된 멤버를 메서드로 이동하여 스레드로부터 안전하게 렌더링하십시오.