Весенний перенос SecurityContext для тестирования интеграции

109
5

Я хочу проверить мои конечные точки REST. В моих методах REST есть некоторые фильтры, основанные на SecurityContext. Когда я устанавливаю SecurityContext в своих тестовых классах и вызываю остальные методы, SecurityContext удаляется. Только когда я создаю SecurityContext в моих методах REST, это имеет эффект. Есть ли возможность передать контекст?

SecurityContext securityContext = new SecurityContextImpl();
securityContext.setAuthentication(authentication);
SecurityContextHolder.setContext(securityContext);
// is here User ...
.mockMvc.perform(get("/test"...)

RestController:

public ResponseEntity<...> getTest(){
// is now anonymus
SecurityContextHolder.getContext().getAuthentication().getPrincipal();
}

благодарю вас

спросил(а) 2021-01-19T17:34:43+03:00 6 месяцев, 2 недели назад
1
Решение
78

Вы можете установить аутентификацию, которая повторно используется для всех тестов в одном классе тестов с использованием метода defaultRequest:

@BeforeClass
public void setUp()
{
mockMvc = MockMvcBuilders.webAppContextSetup(wac).defaultRequest(get("/").with(authentication(authentication))).apply(springSecurity()).build();
}

Необходимый статический импорт:

import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.authentication;
import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity;

ответил(а) 2021-01-19T17:34:43+03:00 6 месяцев, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема