Io.undertow.servlet.util.IteratorEnumeration нельзя преобразовать в java.lang.String

Я пытаюсь аутентифицировать пользователя с помощью ключа 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)

Я получил пример кода из этого другого вопроса. Защита API Spring Boot с помощью ключа и секрета API

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
1
0
124
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я обнаружил, что все, что мне нужно, это еще один класс для регистрации фильтра безопасности.

import org.springframework.security.web.context
            .AbstractSecurityWebApplicationInitializer;
public class SpringSecurityInitializer
            extends AbstractSecurityWebApplicationInitializer {
    //no code needed
}

Это полный пример для этого сценария для всех, кому это понадобится. Spring

Другие вопросы по теме

Почему я должен отключить токен csrf, чтобы публиковать данные с помощью почтальона?
Как я могу вернуть ResponseEntity<>(HttpStatus.UNAUTHORIZED), если аутентификация не удалась при базовой аутентификации безопасности Spring?
Есть ли у нас возможность для цепочки перехватчиков в Spring?
Невозможно установить управление одновременным сеансом в весенней загрузке с помощью maxSessions и maxSessionsPreventsLogin
Создайте средство сопоставления шаблонов URI, чтобы разрешить/запретить декодирование JWT
Почему домашняя страница недоступна после добавления весенней безопасности
Почему Spring Security дает кодировщику паролей пустой пароль?
Ошибка сборщика Stream Map Java 8 - роль не может быть преобразована в переменную
Как я могу добавить пользовательскую страницу входа в систему rest angular в приложение Spring, используя DaoAuthenticationProvider
Конфигурация безопасности Spring — HttpSecurity против WebSecurity