我为Spring MVC应用程序编写单元测试。
这是我的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())的结果:
MockHttpServletResponse:
Status = 200
Error message = null
Headers = {}
Content type = null
Body = {"status":200}
Forwarded URL = null
Redirected URL = null
Cookies = []
问题是当我将springSecurityFilterChain与mockMvc一起使用时,为什么响应标头为空?以及如何阅读它们?
答案 0 :(得分:2)
您可能需要将Spring安全配置添加到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(教学项目)。
我不需要手动设置Spring Security过滤器链。