首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用@WithMockUser的Rest保证测试适用于GET请求,但不适用于POST (403错误)

使用@WithMockUser注解可以在测试中模拟一个已认证的用户,以便进行权限相关的测试。该注解可以用于GET请求的测试,但对于POST请求可能会导致403错误。

403错误表示服务器理解请求,但拒绝执行它,通常是由于权限不足引起的。在使用@WithMockUser注解时,它会模拟一个已认证的用户,但并不会模拟用户的权限。对于GET请求,由于通常不涉及修改数据或执行敏感操作,因此可以使用@WithMockUser进行测试。但对于POST请求,由于可能会修改数据或执行敏感操作,需要确保用户具有足够的权限才能执行。

为了解决POST请求中的403错误,可以采取以下几种方法:

  1. 使用@WithMockUser注解时,通过设置用户的权限来模拟具有足够权限的用户。可以在注解中使用authorities属性来指定用户的权限,例如:@WithMockUser(authorities = "ROLE_ADMIN")。
  2. 在测试方法中,使用Spring Security的MockMvcRequestBuilders工具类构建POST请求时,可以使用with(csrf())方法添加CSRF令牌,以确保请求是经过CSRF保护的。例如:
代码语言:txt
复制
import static org.springframework.security.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.security.test.web.servlet.request.MockMvcRequestBuilders.with;
import static org.springframework.security.test.web.servlet.response.MockMvcResultMatchers.status;

...

mockMvc.perform(post("/api/endpoint")
        .with(csrf())
        .contentType(MediaType.APPLICATION_JSON)
        .content(jsonPayload))
        .andExpect(status().isOk());
  1. 如果需要进行更复杂的权限测试,可以使用Spring Security的@WithMockUser和@WithUserDetails注解结合使用。@WithUserDetails注解可以指定一个已存在的用户,包括其权限信息。例如:
代码语言:txt
复制
@WithUserDetails(value = "admin", userDetailsServiceBeanName = "myUserDetailsService")
public void testPostRequestWithAdminUser() {
    // Perform POST request and assert the response
}

在上述示例中,"admin"是一个已存在的用户,通过userDetailsServiceBeanName属性指定了用户详情服务的Bean名称。

总结起来,使用@WithMockUser的Rest保证测试适用于GET请求,但对于POST请求可能会导致403错误。为了解决这个问题,可以通过设置用户的权限、添加CSRF令牌或结合使用@WithMockUser和@WithUserDetails注解来进行测试。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的视频

领券