2014-10-13 4 views
4

내 스프링 MVC 애플리케이션에 대한 단위 테스트를 작성합니다.스프링 MockMvc에서 빈 응답 헤더 (springSecurityFilterChain 포함)

이 내 mockMvc 초기화 코드 :

@Configuration 
public class SpringMockFactory { 
    @Autowired 
    private WebApplicationContext wac; 

    @Autowired 
    private FilterChainProxy springSecurityFilterChain; 

    @Bean 
    @Scope("prototype") 
    public MockMvc getMockMvc() { 
     return webAppContextSetup(wac) 
       .addFilter(springSecurityFilterChain) 
       .build(); 
    } 
} 

모든 것이 잘 작동하지만, 내가 추가 할 때 springSecurityFilterChain 응답 헤더는 항상 (이 중요한 원인입니다 I 세트-Cookie 헤더를 확인하려면) 비어 있습니다.

resultActions = mockMvc.perform(post("/api/login") 
       .contentType(MediaType.APPLICATION_FORM_URLENCODED) 
       .param("username", "sysadmin") 
       .param("password", "password") 
).andDo(print()); 

그리고이 andDo의 결과이다 (인쇄()) :

나는 작업을 수행하기 위해이 코드를 사용

MockHttpServletResponse: 
      Status = 200 
    Error message = null 
     Headers = {} 
    Content type = null 
      Body = {"status":200} 
    Forwarded URL = null 
    Redirected URL = null 
     Cookies = [] 

질문입니다 응답 헤더 때 비어있는 이유 mockMvc와 함께 springSecurityFilterChain을 사용 하시겠습니까? 그리고 그것들을 읽는 방법?

+0

동일한 문제가 있습니다 ... 필터의 다른 조합을 테스트하려고했습니다/등. 운이 없다. –

+0

내 대답을 시도 했습니까? –

답변

2

MockMvc 개체에 스프링 보안 구성을 추가해야 할 수도 있습니다.

예 :

mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build(); 

springSecurity() 초기화는 org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers 패키지로 제공된다. 편리하게 정적으로 가져올 수 있습니다. org.springframework.security:spring-security-test 의존성이 필요함에 유의하십시오 (4.0.1.RELEASE와 잘 맞았습니다).

예 : here (교훈 프로젝트)를 참조하십시오.

스프링 보안 필터 체인을 수동으로 설정할 필요가 없습니다.