Пытаюсь протестировать домашний контроллер
@RequestMapping("/")
@ResponseBody
String home() {
return "Hello World!";
}
Я использую Spring Security, используя имя пользователя «user» и тестирую его как пароль по умолчанию, но @PreAuthorize не работает
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@PreAuthorize("hasRole('ADMIN')")
public class HomeControllerTest {
@Autowired
private TestRestTemplate restTemplate;
@Test
@WithMockUser(username = "user", password = "test", roles = "ADMIN")
public void home() throws Exception {
String body = this.restTemplate.getForObject("/", String.class);
assertThat(body).isEqualTo("Hello World!");
}
}
Результат
Ожидаемый результат:
‹" [Привет, мир!] ">
Фактический результат:
‹" {"Timestamp": 1501100448216, "status": 401, "error": "Unauthorized", "message": "Для доступа к этому ресурсу требуется полная аутентификация", "path": "/"}] ">
Я что-то упускаю?
@WithMockUser
здесь практически бесполезно. Это сработает только в том случае, если вы напрямую вызовете методhome()
на контроллере. Предполагая, что у вас есть базовая настройка аутентификации для входа в систему, вы должны отправить учетные данные с вашим запросом. Также@PreAuthorize
в вашем тестовом примере ничего не добьется. - person M. Deinum   schedule 28.07.2017