Почему MockMVC игнорирует Security?

MockMVC - это инструмент, предоставляемый Spring Framework, который позволяет разрабатывать и протестировать веб-приложения на Java. Он обеспечивает возможность эмулировать HTTP-запросы и проверять ответы приложения, не выполняя реальные HTTP-запросы.

Однако, по умолчанию MockMVC не включает поддержку безопасности, поскольку предполагается, что вы тестируете только функциональность контроллеров и сервисов вашего приложения, а не механизмы аутентификации и авторизации, обеспеченные Spring Security.

Для включения поддержки Spring Security в MockMVC, вы можете использовать аннотацию @WithMockUser, которая указывает, какого пользователя использовать при выполнении запроса. Например, вы можете аннотировать свой тестовый метод следующим образом:

@Test
@WithMockUser(username = "admin", roles = { "ADMIN" })
public void testAdminEndpoint() throws Exception {
    mockMvc.perform(get("/admin"))
           .andExpect(status().isOk())
           .andExpect(content().string("Hello, admin!"));
}

Таким образом, вы можете установить пользователя, имеющего определенные права доступа, и проверить корректность работы аутентификации и авторизации в вашем приложении.

Тем не менее, стоит отметить, что в реальности Spring Security имеет множество настроек и сложных механизмов, которые должны быть протестированы в самом приложении, а не в тестах MockMVC. Для тестирования некоторых аспектов Spring Security, таких как права доступа к ресурсам или логика аутентификации, вам может потребоваться использовать другие инструменты, такие как Spring Security Test или Mockito.