我刚刚在我的Spring Boot应用程序中添加了spring-boot-starter-security
和spring-security-test
。我想保护控制器和方法。
现在我所有的控制器测试(@WebMvcTest
)都失败了。似乎所有GET方法都以401失败,而所有POST / DELETE / PUT都以403失败。
我可以使用@WithMockUser
轻松修复401。
让所有测试再次运行的最简单方法是什么?我不想在这些测试中考虑安全性。稍后,我想添加针对安全性的特定测试。
答案 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。