猿问

在MockMvc测试期间如何使用正确的Spring Security配置

我正在尝试测试其中一项的访问,该访问@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)


温温酱
浏览 424回答 1
1回答
随时随地看视频慕课网APP

相关分类

Java
我要回答