在MockMVC中使用带有生产身份验证逻辑的springSecurity()时的@WithUserDetails和@WithMockUser

时间:2019-01-14 18:37:27

标签: spring spring-boot spring-mvc spring-security spring-security-oauth2

经过一段时间的调试,我发现@WithUserDetails@WithMockUser伪造了SecurityContext,但是没有添加任何伪造的Authentication Provider,因此在与生产代码

  • SecurityContextHolder中填充了包含我们的虚拟SecurityContext对象的假Authentication

  • 发生过滤器,并且所有产品认证系统都会失败,因为AbstractUserDetailsAuthenticationProvider中没有多余的ProviderManager,并且在出现最后错误时,SecurityContext也已清除,因此我放弃了测试模拟身份验证设置...

所以..有什么内置方法可以在生产授权代码上使用测试方便的@With ..注释?是虫子吗?我可以更改先前项目符号的顺序,以便至少在以后进行测试准备吗?

1 个答案:

答案 0 :(得分:1)

正确,@WithUserDetails@WithMockUser适用于希望模拟已通过身份验证的请求。

因此,所有进行身份验证的过滤器都不应在此时触发。如果您要触发过滤器,则可以在已经进行身份验证的情况下重写过滤器以解决用例。

另一种选择是重写测试以按照应用程序期望的方式进行身份验证。