Spring Boot 2.1-不具有Spring Security自动配置功能的@WebMvcTest

时间:2018-11-20 09:20:45

标签: spring-boot

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

@WebMvcTest(SomeController.class)
@AutoConfigureMockMvc(secure = false)
public class SomeControllerTests { ... }

这导致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 { ... }

问题是:Spring Boot 2.1中是否有更紧凑的方法来定义此类测试?

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:0)

遇到相同的情况,而使用以下注释而不是@WebMvcTest的方法是有帮助的。在这种情况下,@WithMockUser没有帮助。

@WebAppConfiguration
@Import({MockMvcAutoConfiguration.class})
@EnableConfigurationProperties({ResourceProperties.class, WebMvcProperties.class})

controllers的{​​{1}} / value中存在的类进入@WebMvcTest注释的value中。

来源:https://github.com/spring-projects/spring-boot/issues/14227#issuecomment-688824627