我正在尝试测试其中一项的访问,该访问@RestController由定制的Spring Security配置保护。我的用例如下:HTTP GETto/someEndpoint通过身份验证得到保护,但是POST对同一终结点的HTTP请求却不被保护。当我启动应用程序并用我的前端或邮递员对其进行测试时,它工作正常。
现在,我正在尝试MockMvc使用安全性配置编写测试。我已经在StackOverflow上通过很多答案获得了成功,但是没有任何帮助。
我的测试设置如下所示:
@RunWith(SpringRunner.class)
@WebMvcTest(controllers = MyController.class)
@WebAppConfiguration
@ContextConfiguration
public class AssessmentControllerTest {
private MockMvc mockMvc;
@Autowired
private WebApplicationContext webApplicationContext;
@Before
public void init() throws Exception {
this.mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext)
.alwaysDo(print())
.apply(SecurityMockMvcConfigurers.springSecurity())
.build();
}
// some test methods
}
通过此设置,我所有的端点都得到了保护,甚至HTTPPOST都返回401而不是201。我还启用了调试日志以提高安全性,并且在调试日志中指出测试使用,default configure(HttpSecurity)但在日志中找不到我的任何AntMatchers:
2018-07-04 19:20:02.829 DEBUG 2237 --- [ main] s.s.c.a.w.c.WebSecurityConfigurerAdapter : Using default configure(HttpSecurity). If subclassed this will potentially override subclass configure(HttpSecurity).
2018-07-04 19:20:03.097 DEBUG 2237 --- [ main] edFilterInvocationSecurityMetadataSource : Adding web access control expression 'authenticated', for org.springframework.security.web.util.matcher.AnyRequestMatcher@1
2018-07-04 19:20:03.127 DEBUG 2237 --- [ main] o.s.s.w.a.i.FilterSecurityInterceptor : Validated configuration attributes
2018-07-04 19:20:03.130 DEBUG 2237 --- [ main] o.s.s.w.a.i.FilterSecurityInterceptor : Validated configuration attributes
2018-07-04 19:20:03.161 INFO 2237 --- [ main] o.s.s.web.DefaultSecurityFilterChain : Creating filter chain:
通常可以在MockMvc测试期间使用我的具体Spring Security配置,还是必须在测试期间使用引导整个Spring上下文@SpringBootTest?我正在使用(带有Java 1.8的Spring Boot 2.0.3.RELEASE)
相关分类