当前位置: 首页 > 知识库问答 >
问题:

如何在spring boot应用程序中模拟安全上下文持有者

岳嘉悦
2023-03-14

我们在Spring boot rest api中有下面的代码片段来获取用户角色。

Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if(auth.getAuthorities().contains(new SimpleGrantedAuthority("ROLE_roleName1"))){
// some conditions
} else if (auth.getAuthorities().contains(new SimpleGrantedAuthority("ROLE_roleName2"))){
// some conditions
}

我们在一个测试课上有这个。

@Before
public void setUp(){
Authentication auth = Mockito.mock(Authentication.class);
SecurityContext securityContext = Mockito.mock(SecurityContext.class);
Mockito.when(securityContext.getAuthentication()).thenReturn(authentication);
SecurityContextHolder.setContext(securityContext);
}

但junit测试用例失败了。请建议如何为安全上下文持有者编写junit测试用例(针对上述代码)。

共有1个答案

麻昌翰
2023-03-14

您可以使用@WitMockUser(自Spring4.0起可用)注释您的测试方法,例如@WitMockUser(角色="MANAGER")

@Test
@WithMockUser(username = "myuser", password = "pass", roles = "USER")
public void test() throws Exception {
    mockMvc.perform(get("/foo"))
        .andExpect(status().isOk());
}

请记住添加以下依赖项来测试项目的依赖项:

<代码>组织。springframework。安全:Spring安全测试

 类似资料:
  • 我有这样的测试: 在测试中,我禁用了验证/授权 在代码中返回null 还有这个:

  • 它永远不会结束,应用程序也不会响应: 我已经检查了以下几点: 我的应用程序扩展了SpringBootServletInitializer 我将初学者tomcat依赖项放在提供的中 war名为“EdgeCustomerOfferStorageWeb.war”,实例端口为10080,因此我使用:http://server:10080/EdgeCustomerOfferStorageWeb/It不响应,

  • 我已经使用Spring初始值设定项、嵌入式Tomcat、Thymeleaf模板引擎和作为可执行JAR文件的包生成了一个Spring Boot web应用程序。 使用的技术: Spring启动2.0.0。M6,Java8, Maven 这是我的安全配置 在我的 但当我在http://localhost:1234/iberiaWebUtils,而不是去http://localhost:1234/ibe

  • 我有Kafka Streams java应用程序启动并运行。我试图使用KSQL创建简单的查询,并使用Kafka流来实现复杂的解决方案。我希望将KSQL和Kafka流作为Java应用程序运行。 我打算通过https://github.com/confluentinc/ksql/blob/master/ksqldb-examples/src/main/java/io/confluent/ksql/em

  • 我需要在REST级别编写一个e2e测试,发送真正的请求。所以我想用应用上下文,而不是嘲讽豆。 有一个自动连接的,以及此<code>MyService。类依赖于两个存储库类。因此,我尝试模拟,并以以下方式将它们注入真正的: 但我得到了以下错误: 我还尝试使用< code > @ context configuration(classes = { my config . class })没有成功: 我

  • 要获取请求URL,可以在堆栈溢出中找到以下方法。 第一种方法: 第二种方法: 第三种方法: 我不知道在spring boot应用程序中使用哪一个来获取请求URL。 如果我使用第三种方法,那么我是否需要在配置类中创建RequestContextListener的bean,如下所示?