【发布时间】: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