【问题标题】:How to write unit test for SpringBoot API having Spring Security configured如何为具有 Spring Security 配置的 Spring Boot API 编写单元测试
【发布时间】:2020-09-18 07:15:31
【问题描述】:

我创建了一个包含各种端点的 Spring Boot 应用程序。除了signup 和登录端点,我为其他请求添加了一个过滤器。所有其他请求应具有:

AuthorizationBearer <token>

并且请求通过 Spring Security 过滤器链,该过滤器链通过UserDetailService 检查用户是否存在于表中。

我想知道如何使用 Spring Security 为任何 GET/POST API 编写单元测试?

我想到的一种方法是通过调用signup API 生成实际令牌,然后使用 Signup API 生成的授权令牌调用其他 API。

可能有一些方法可以模拟或跳过单元测试的授权承载

我想知道遵循的正确/最佳方法是什么?

【问题讨论】:

    标签: java spring spring-boot junit spring-security


    【解决方案1】:

    对于我的应用程序,我一直在使用 MockUser 注释与 MockMvc bean 的组合。 MockUser 能够使用用户及其主体填充 Spring SecurityContext,其中包括他的 User 对象和 GrantedAuthority(又名角色)。有了这个,您可以测试您的控制器,而无需创建任何令牌。它更容易,并且与您的身份验证过程更加分离。

    像这样:

    @Test
    @WithMockUser("admin")  
    void testAuthorize() throws Exception {
        this.mockMvc.perform(get("/objects")).andExpect(status().isOk());
    }
    

    在 Spring 文档中,您可以阅读更多 about。你还有@WithAnonymousUser,用来模拟匿名用户,@WithUserDetails 用来放置自定义UserDetailsService

    【讨论】:

      猜你喜欢
      • 2019-01-20
      • 2023-02-04
      • 2018-12-13
      • 1970-01-01
      • 1970-01-01
      • 2015-05-17
      • 2017-10-21
      • 2020-08-08
      • 2022-06-12
      相关资源
      最近更新 更多