Spring MockMvc未考虑角色

时间:2018-07-13 14:21:08

标签: spring testing spring-security authorization mockmvc

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

以下是控制器类的一些代码片段,其中包含我正在测试的方法之一:

@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和unit testing还是很陌生)。在该类中,我具有以下代码行:

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

以前显示的测试失败了,正如我说的是200。现在,我认为我在此测试的配置中做错了,这就是为什么不考虑角色的原因。也许我对“ .with”部分的工作方式感到困惑。

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

1 个答案:

答案 0 :(得分:0)

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