使用springSecurityFilterChain的Spring MockMvc中的空响应头

使用springSecurityFilterChain的Spring MockMvc中的空响应头,spring,spring-mvc,spring-security,spring-test,Spring,Spring Mvc,Spring Security,Spring Test,我为我的SpringMVC应用程序编写单元测试 这是我的mockMvc初始化代码: @Configuration public class SpringMockFactory { @Autowired private WebApplicationContext wac; @Autowired private FilterChainProxy springSecurityFilterChain; @Bean @Scope("prototype")

我为我的SpringMVC应用程序编写单元测试

这是我的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时,响应头总是空的(这很重要,因为我想检查Set Cookie头)

我使用此代码执行操作:

resultActions = mockMvc.perform(post("/api/login")
                .contentType(MediaType.APPLICATION_FORM_URLENCODED)
                .param("username", "sysadmin")
                .param("password", "password")
).andDo(print());
这是andDo(print())的结果:


问题是,当我将springSecurityFilterChain与mockMvc一起使用时,为什么响应头是空的?以及如何读取它们?

您可能需要将Spring安全配置添加到
MockMvc
对象中

例如:

mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();
springSecurity()
初始值设定项可在
org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers
包中找到。您可以方便地静态导入它。 请注意,您需要
org.springframework.security:spring安全性测试
dependency(我对4.0.1.RELEASE很在行)

参见示例(说教项目)


我不需要手动设置Spring Security过滤器链。

我也有同样的问题…尝试测试不同的过滤器组合/等等,但没有成功。你尝试过我的答案吗?
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).apply(springSecurity()).build();