Spring Boot 2.1 - 没有Spring Security自动配置的@WebMvcTest

And*_*ess 9 spring-boot

在迁移到Spring Boot 2.1之前,我们在服务中使用了几个控制器测试,@WebMvcTest并结合使用@AutoConfigureMockMvc:

@WebMvcTest(SomeController.class)
@AutoConfigureMockMvc(secure = false)
public class SomeControllerTests { ... }
Run Code Online (Sandbox Code Playgroud)

这导致Spring Security配置被禁用,您可以在不模拟OAuth/JWT的情况下运行MVC测试.

在Spring Boot 2.1中,该secured属性已弃用,发行说明中提到了该属性

[...] @WebMvcTest查找WebSecurityConfigurer bean [...].

为了避免我们的弃用secured属性和加载,WebSecurityConfigurer我们将测试重写为:

@WebMvcTest(
    value = SomeController.class,
    excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = WebSecurityConfigurer.class),
    excludeAutoConfiguration = MockMvcSecurityAutoConfiguration.class)
public class SomeControllerTests { ... }
Run Code Online (Sandbox Code Playgroud)

问题是:在Spring Boot 2.1中有更紧凑的方法来定义这样的测试吗?

Ste*_*oll 2

是的,您不应该解决该标志已被弃用的事实,而应该接受这样一个事实:事情正在朝着这个方向发展。

从 Spring Boot 2.1 开始,如果您有 Spring Security,您的测试将使用您的自定义配置来保护。真正的问题是什么?

如果您不想对某些测试进行身份验证,只需使用 Spring Security 的测试基础设施并添加@WithMockUser.

  • 默认情况下包含安全性来测试 Web 层感觉不太合适。我不确定这是否是 Spring 前进的正确方向。 (19认同)
  • 切片的想法是只启用必要的部分。所以我不想激活比我需要的更多的代码。 (3认同)
  • 我们的服务使用 Spring Security OAuth2 运行。我没有详细查看,但我认为在这种情况下“@WithMockUser”不会有太大帮助。但无论如何,谢谢,我不确定我们是否走在正确的道路上。 (2认同)