代码之家  ›  专栏  ›  技术社区  ›  Whimusical

@在带有产品认证逻辑的mockmvc中使用springsecurity()时,withUserDetails和@withMockUser

  •  0
  • Whimusical  · 技术社区  · 6 年前

    经过一段时间的调试,我发现 @WithUserDetails @WithMockUser 虚设 SecurityContext 但不要加任何假货 Authentication Provider ,因此,如果这与生产代码一起使用,

    • SecurityContextHolder 都是假的 安全上下文 包含我们的假人 Authentication 对象

    • 发生筛选,所有Prod身份验证系统都失败,因为没有额外的 AbstractUserDetailsAuthenticationProvider 在里面 ProviderManager 最后出错时, 安全上下文 已清除,因此我释放了测试模拟身份验证设置…

    所以…有什么方便使用测试的内置方法吗 @With …生产验证代码上的注释?是虫子吗?我能改变之前的子弹点顺序吗,这样至少测试准备工作会在以后进行?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Filip Hanik VMware    6 年前

    正确, @WithUserDetails @WithMockUser 当您希望模拟已通过身份验证的请求时。

    因此,所有进行身份验证的过滤器都不应该在此时触发。如果您的过滤器正在触发,那么您可以重写过滤器以在已经进行身份验证时考虑用例。

    另一个选项是重写测试以按应用程序的预期方式进行身份验证。