我刚刚在Spring Boot应用程序中添加了spring-boot-starter-security和spring-security-test。我想保护控制器和方法。
现在我所有的控制器测试(@WebMvcTest)都失败了。似乎所有的GET方法都以401失败,所有的POST/DELETE/PUT都以403失败。
我可以通过使用@WithMockUser轻松地修复401。
让所有测试重新运行的最简单方法是什么?我不想在这些测试中考虑安全性。稍后,我想为安全性添加特定的测试。
发布于 2019-08-15 00:59:09
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。
https://stackoverflow.com/questions/57496406
复制相似问题