Spring 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 и модульном тестировании). Внутри этого класса у меня есть следующая строка кода:

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

Тест показал, что ранее он не удался, так как я сказал, что получаю 200. Сейчас я думаю, что я делаю что-то не так в конфигурации этого теста, и поэтому роли не учитываются. Или, может быть, я не понимаю, как работает часть ".with".

Приветствуется любая форма помощи.

@WebMvcTest не использует ваши классы конфигурации. Это означает, что ваша конфигурация безопасности не будет использоваться. Но я думаю, твоя проблема не в этом.

Alexander Polozov 13.07.2018 18:22
0
1
210
1

Ответы 1

Если вы используете Spring Boot, вы можете попробовать использовать @SpringBootTest и @AutoConfigureMockMvc.

Другие вопросы по теме