Я пытаюсь аутентифицировать пользователя по ключу API, отправленному в заголовке, без каких-либо данных пользователя через логин. Затем я получаю исключение приведения, потому что я пытаюсь преобразовать основной состав в строку.
Я пытался получить заголовок в классе SecurityConfig, но это не сработало. Я также попытался получить его в пользовательском фильтре, так или иначе, как текущее решение.
@Bean
public APIKeyAuthFilter authFilter() {
APIKeyAuthFilter filter = new APIKeyAuthFilter(principalRequestHeader);
filter.setAuthenticationManager(authentication -> {
String principal = (String) authentication.getPrincipal();
if (!principalRequestValue.equals(principal)){
throw new BadCredentialsException("The API key was not found or not the expected value.");
}
authentication.setAuthenticated(true);
return authentication;
});
return filter;
}
Я ожидаю, что смогу получить заголовок и проверить значение для сравнения с существующим ключом, но я получаю это исключение "message": "io.undertow.servlet.util.IteratorEnumeration cannot be cast to java.lang.String",
"trace": "java.lang.ClassCastException: io.undertow.servlet.util.IteratorEnumeration cannot be cast to java.lang.String\n\tat uk.co.nesistec.contractpicturechallenge.config.APISecurityConfig.lambda$authFilter$0(APISecurityConfig.java:46)
Я получил пример кода из этого другого вопроса.
Защита Spring Boot API с помощью API-ключа и секрета