【问题标题】:Spring MockMvc not taking roles into accountSpring MockMvc 没有考虑角色
【发布时间】:2018-07-13 14:21:07
【问题描述】:

我有 API 端点,需要用户担任特定角色。因此,在我的一些测试中,我尝试到达这些端点并期望出现 401 错误,但我得到了 200。我正在使用 MockMvc 来执行调用。

以下是控制器类的一些 sn-ps 以及我正在测试的方法之一:

@RestController
public class MyController {


    @GetMapping("/getcurrentuser")
    public User getCurrent() {
         ...code
    }

}

以下是我的测试类(只展示了各自的测试方法和变量):

@RunWith(SpringRunner.class)
@WebMvcTest(MyController.class)
@ContextConfiguration(classes = MyController.class)
public class MyControllerTest {

    @Autowired
    private MockMvc mockMvc;
@Test
    public void testGetCurrentFailedDueToIncorrectRole() throws Exception {
        mockMvc.perform(get("/api/getcurrentuser")
                        .with(user(USER_NAME).password(PASSWORD)))
               .andExpect(status().isUnauthorized());
    }
}

我也有一个 spring 安全配置类,但是我不确定它是否在这个测试中被引入到上下文中(对不起,我对 spring 和单元测试还是相当陌生)。在这个类中,我有以下代码行:

.antMatchers("/api/**").hasAnyRole("ADMIN", "READ_ONLY")

之前的测试显示失败,正如我所说的,我得到了 200。现在,我认为我在此测试的配置中做错了,这就是没有考虑角色的原因。或者我可能对“.with”部分的工作方式感到困惑。

任何形式的帮助都将不胜感激。

【问题讨论】:

  • @WebMvcTest 不要使用您的配置类。这意味着您的安全配置将不会被使用。但我认为你的问题不是这个。

标签: spring testing spring-security authorization mockmvc


【解决方案1】:

如果您使用的是 Spring Boot,您可能想尝试使用 @SpringBootTest 和 @AutoConfigureMockMvc。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    • 1970-01-01
    • 2015-01-14
    • 2019-11-06
    • 2019-10-27
    • 1970-01-01
    相关资源
    最近更新 更多