У меня есть приложение на основе Spring Boot, которое использует аутентификацию ISAM от внешнего поставщика. У меня есть конечная точка rest / json /actuator/health
, которая возвращает разные данные в зависимости от того, аутентифицирован ли пользователь или нет.
Как я могу проверить подлинность аутентификации во время модульного тестирования, чтобы убедиться, что моя конфигурация верна?
В setup()
я попытался установить токен вручную и переопределить AuthorizationService для возврата true.
@Before
public void setUp() throws Exception
{
mockMvc = webAppContextSetup(wac).apply(springSecurity()).build();
List roles = Arrays.asList(new SimpleGrantedAuthority("ROLE_USER"));
UsernamePasswordAuthenticationToken auth =
new UsernamePasswordAuthenticationToken("dave", "secret",
roles);
if (!auth.isAuthenticated()) { fail("NOT AUTHENTICATED!"); }
SecurityContextHolder.getContext().setAuthentication(auth);
//fake logged in
when(authorizationService.isCurrentUserAuthorized(anyString(),
anyString(),
ArgumentMatchers.any(ResourceType.class),
ArgumentMatchers.any(ActionType.class)))
.thenReturn(true);
}
Однако, когда я запускаю
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if (!auth.isAuthenticated()) { fail("NOT AUTHENTICATED!"); }
UsernamePasswordAuthenticationToken authToken =
(UsernamePasswordAuthenticationToken)auth;
mockMvc.perform(get("/health_secure")
.principal(auth)
.header("Authorization", "Bearer " + token))
.andDo(print())
.andExpect(status().isOk())
.andExpect(forwardedUrl("/actuator/health"));
, я получаю:
"error":"invalid_token","error_description":"Cannot convert access token to JSON"