Я настраиваю модульные тесты для своих контроллеров Spring MVC и пытаюсь использовать тестовую среду Spring MVC. Для каждой конечной точки в моем контроллере я хочу обеспечить доступ только пользователям с назначенными полномочиями. Моя проблема в том, что я использую пользовательскую реализацию пользователя и получаю исключения приведения классов при использовании инструментов mockMvc для этого.
Для каждого запроса я ожидаю, что он будет выглядеть примерно так:
mockMvc.perform(MockMvcRequestBuilders.get(path).with(user("user").authorities(authorities)))
.andExpect(status().isOk())
.andExpect(authenticated().withUsername("user"));
Я хотел бы каким-то образом настроить приведенное выше утверждение, чтобы указать моего пользовательского принципала пользователя. См. пользовательский метод Spring ниже. Моей первой мыслью было переопределить класс UserRequestPostProcessor
и настроить его так, чтобы он использовал мой собственный тип пользователя вместо стандартного пользователя Spring Security, но этот класс объявлен как final и не может быть подклассом. Есть ли поддержка для переопределения поведения по умолчанию и использования пользовательского типа??
public static UserRequestPostProcessor user(String username) {
return new UserRequestPostProcessor(username);
}
Из того, что я видел, я являюсь кандидатом на аннотирование моих тестов с помощью @WithSecurityContext, чтобы я мог установить свой пользовательский принцип пользователя в Authentication. Меня беспокоит то, что я буду ограничен тестированием одного пользователя для каждого метода, и это не масштабируется для того, что я пытаюсь сделать.
Как я могу протестировать запросы, сделанные несколькими пользовательскими пользователями?