WebMVC在添加spring安全性后测试失败,如何立即修复所有问题?

时间:2019-08-14 14:10:54

标签: java spring spring-boot spring-security

我刚刚在我的Spring Boot应用程序中添加了spring-boot-starter-securityspring-security-test。我想保护控制器和方法。

现在我所有的控制器测试(@WebMvcTest)都失败了。似乎所有GET方法都以401失败,而所有POST / DELETE / PUT都以403失败。

我可以使用@WithMockUser轻松修复401。

让所有测试再次运行的最简单方法是什么?我不想在这些测试中考虑安全性。稍后,我想添加针对安全性的特定测试。

1 个答案:

答案 0 :(得分:1)

Spring Security将CSRF防御自动添加到每个POST,DELETE和PUT请求中,因此这就是为什么看到403的原因。

您可以disable CSRF protection,尽管这是一种重要的防御机制,所以通常不建议禁用它。 Spring Security在其参考文档中提供了一些有关如何确定when CSRF protection is necessary的信息。

相反,您可以通过配置Mock Mvc实例来拥有Spring Security add in a test CSRF token to your tests

this.mockMvc.perform(post("/").with(csrf()))

csrf()来自SecurityMockMvcRequestPostProcessors

请注意,测试失败的原因与POST等在您的应用程序中失败的原因相同-它们也将是expecting a CSRF token as part of the request