首页 > 解决方案 > 使用 WebTestClient 在 springBootTest 中禁用安全性

问题描述

SpringBoot 2.1 发行说明中包含以下信息:

安全配置现在应用于 WebTestClient。有关测试安全端点的更多信息,请参阅 Spring Security 参考文档的相关部分。

问题:

将 SpringBoot 从2.0.4更新到2.1.2后,我发现我的测试已经停止工作。我正在使用@SpringBootTest我的 REST 测试。我WebTestClient无法访问服务器。我确实尝试了很多(例如从这里)来模拟或禁用安全性并且仍然得到403 FORBIDDEN响应。

你有什么线索可能是错的吗?

WebTestClient通过以下方式创建:

client = WebTestClient
  .bindToServer()
  .baseUrl("http://localhost:$port")
  .build()

还试图排除SecurityAutoConfiguration.class.

标签: javaspringspring-bootspring-security

解决方案


在某个黑暗的地方,在兔子洞的深处,我发现了这个:

@TestConfiguration
@Order(1)
public class SecurityConfiguration
  implements WebSecurityConfigurer<WebSecurity> {

  @Override
  public void init(WebSecurity builder) throws Exception {
    builder.ignoring().requestMatchers(
      new AntPathRequestMatcher("/**"));
  }

  @Override
  public void configure(WebSecurity builder) throws Exception {
  }

}

记得在 中注册类@SpringBootTest,例如:

@SpringBootTest(
  classes = [SomeApplication, SecurityConfiguration],
  webEnvironment = RANDOM_PORT
)

它并没有禁用弹簧安全性,但它使它变得透明。


推荐阅读