Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot 如何在Spring boot中测试具有等待性的安全端点?_Spring Boot_Spring Test Mvc_Awaitility - Fatal编程技术网

Spring boot 如何在Spring boot中测试具有等待性的安全端点?

Spring boot 如何在Spring boot中测试具有等待性的安全端点?,spring-boot,spring-test-mvc,awaitility,Spring Boot,Spring Test Mvc,Awaitility,我正在使用spring boot,我希望通过使用MockMvc调用安全端点来断言异步副作用 我一直在使用等待性,但显然,在不同线程中执行时,模拟的安全上下文丢失了 我找不到传递上下文的方法,我尝试了SecurityContextHolder.setContext(),但没有成功,我想spring的MockMvc以不同的方式存储上下文 @Test @WithMockUser(authorities = "admin", username = "user") void shouldRun

我正在使用spring boot,我希望通过使用MockMvc调用安全端点来断言异步副作用

我一直在使用等待性,但显然,在不同线程中执行时,模拟的安全上下文丢失了

我找不到传递上下文的方法,我尝试了
SecurityContextHolder.setContext()
,但没有成功,我想spring的MockMvc以不同的方式存储上下文

  @Test
  @WithMockUser(authorities = "admin", username = "user")
  void shouldRunSideEffectAsync() throws Exception {
    mockMvc.perform(post("/foo")).andExpect(status().isAccepted());
    await()
        .atMost(TIMEOUT)
        .untilAsserted(() -> mockMvc.perform(get("/foo")).andExpect(status().isOk()));
  }
GET将在一段时间内返回404,然后在异步任务完成时返回200。但是,当MockUser信息丢失时,这将始终返回403


我怎样才能解决这个问题呢?

你几乎就明白了。MockMvc的安全性由实现,它使用设置/获取安全上下文。这只是
SecurityContextHolder
的包装


因此,您可以在等待线程中使用TestSecurityContext.setContext(),它应该可以正常工作。

您几乎成功了。MockMvc的安全性由实现,它使用设置/获取安全上下文。这只是
SecurityContextHolder
的包装

因此,您可以在等待线程中使用
TestSecurityContext.setContext()
,它应该可以工作