Ошибка NiFi 1.25 при попытке подключения к службе LDAP: ClassCastException: LdapProvider

Я пытаюсь добавить аутентификацию LDAP (не LDAPS) в NiFi 1.25.0 в Windows, чтобы пользователи могли входить в систему, используя свои сетевые идентификаторы, но я не могу обойти эту ошибку:

«FactoryBean выдал исключение при создании объекта; вложенное исключение — java.lang.ClassCastException: класс org.apache.nifi.ldap.LdapProvider»

После перезагрузки через пару минут появляется ошибка. Между перезагрузками проходит около 15 секунд. Служба никогда не запускается.

NiFi работает нормально с настройкой по умолчанию «однопользовательский авторизатор».

Когда я запускаю NiFi, с моей машины не поступает никаких запросов протокола LDAP, поэтому я предполагаю, что код никогда не доходит до точки, где он пытается подключиться. «ClassCastException» звучит как ошибка кода, но я предполагаю, что в моей конфигурации (ниже) есть проблема.

Записи журнала ошибок включают в себя:

ни-фи-bootstrap.log

ОШИБКА [обработчик журнала NiFi] org.apache.nifi.StdErr Не удалось запустить веб-сервер: ошибка при создании компонента с именем «niFiWebApiConfiguration»: BeanPostProcessor перед созданием экземпляра компонента не удалось; вложенным исключением является org.springframework.beans.factory.UnsatisfiedDependencyException: ошибка при создании bean-компонента с именем org.springframework.security.config.annotation.method.configuration.PrePostMethodSecurityConfiguration': неудовлетворенная зависимость, выраженная через параметр конструктора 0; вложенным исключением является org.springframework.beans.factory.UnsatisfiedDependencyException: ошибка создания bean-компонента с именем «org.apache.nifi.web.security.configuration.AuthenticationSecurityConfiguration»: неудовлетворенная зависимость, выраженная через параметр конструктора 2; вложенное исключение: org.springframework.beans.factory.BeanCreationException: ошибка при создании bean-компонента с именем «authorizer»: FactoryBean выдал исключение при создании объекта; вложенным исключением является java.lang.ClassCastException: класс org.apache.nifi.ldap.LdapProvider
ОШИБКА [обработчик журнала NiFi] org.apache.nifi.StdErr Завершение работы...
ИНФОРМАЦИЯ [main] org.apache.nifi.bootstrap.RunNiFi NiFi никогда не запускался. Не перезапускает NiFi

2024-04-30 09:08:29,954 ОШИБКА [основная] o.s.web.context.ContextLoader Не удалось инициализировать контекст
org.springframework.beans.factory.BeanCreationException: ошибка при создании компонента с именем «niFiWebApiConfiguration»: BeanPostProcessor перед созданием экземпляра компонента не удалось; вложенным исключением является org.springframework.beans.factory.UnsatisfiedDependencyException: ошибка создания bean-компонента с именем «org.springframework.security.config.annotation.method.configuration.PrePostMethodSecurityConfiguration»: неудовлетворенная зависимость, выраженная через параметр конструктора 0; вложенным исключением является org.springframework.beans.factory.UnsatisfiedDependencyException: ошибка создания bean-компонента с именем «org.apache.nifi.web.security.configuration.AuthenticationSecurityConfiguration»: неудовлетворенная зависимость, выраженная через параметр конструктора 2; вложенное исключение: org.springframework.beans.factory.BeanCreationException: ошибка при создании bean-компонента с именем «authorizer»: FactoryBean выдал исключение при создании объекта; вложенным исключением является java.lang.ClassCastException: класс org.apache.nifi.ldap.LdapProvider
...
Вызвано: org.springframework.beans.factory.UnsatisfiedDependencyException: ошибка создания bean-компонента с именем «org.apache.nifi.web.security.configuration.AuthenticationSecurityConfiguration»: неудовлетворенная зависимость, выраженная через параметр конструктора 2; вложенное исключение: org.springframework.beans.factory.BeanCreationException: ошибка при создании bean-компонента с именем «authorizer»: FactoryBean выдал исключение при создании объекта; вложенным исключением является java.lang.ClassCastException: класс org.apache.nifi.ldap.LdapProvider
...
Вызвано: org.springframework.beans.factory.BeanCreationException: ошибка при создании bean-компонента с именем «authorizer»: FactoryBean выдал исключение при создании объекта; вложенным исключением является java.lang.ClassCastException: класс org.apache.nifi.ldap.LdapProvider
...
Вызвано: java.lang.ClassCastException: класс org.apache.nifi.ldap.LdapProvider

(Извиняюсь за форматирование. Все утро ругаюсь с редактором.)

Настройки конфигурации ниже. Наш сервер LDAP не использует SSL/TLS, поэтому значения конфигурации для хранилища ключей, хранилища доверенных сертификатов и т. д. отсутствуют.

NiFi.свойства:
nifi.security.user.authorizer=ldap-provider
nifi.security.allow.anonymous.authentication=false
nifi.security.user.login.identity.provider=ldap-provider

авторизаторы.xml:

<authorizer>
    <identifier>ldap-provider</identifier>
    <class>org.apache.nifi.ldap.LdapProvider</class>
</authorizer>

логин-идентификатор-провайдеры.xml:

<provider>
    <identifier>ldap-provider</identifier>
    <class>org.apache.nifi.ldap.LdapProvider</class>
    <property name = "Authentication Strategy">SIMPLE</property>

    <property name = "Manager DN">CN=ourLdapUser,CN=Users,DC=ourDomain,DC=local</property>
    <property name = "Manager Password">########</property>

    <property name = "TLS - Keystore"></property>
    <property name = "TLS - Keystore Password"></property>
    <property name = "TLS - Keystore Type"></property>
    <property name = "TLS - Truststore"></property>
    <property name = "TLS - Truststore Password"></property>
    <property name = "TLS - Truststore Type"></property>
    <property name = "TLS - Client Auth"></property>
    <property name = "TLS - Protocol"></property>
    <property name = "TLS - Shutdown Gracefully"></property>

    <property name = "Referral Strategy">FOLLOW</property>
    <property name = "Connect Timeout">10 secs</property>
    <property name = "Read Timeout">10 secs</property>

    <property name = "Url">ldap://[ip address]:389</property>
    <property name = "User Search Base">CN=Users,DC=ourDomain,DC=local</property>
    <property name = "User Search Filter">sAMAccountName = {0}</property><!-- also tried uid = {0} -->

    <property name = "Identity Strategy">USE_USERNAME</property>
    <property name = "Authentication Expiration">12 hours</property>
</provider>

Я пробовал другие настройки конфигурации для авторизатора LDAP, которые нашел в Интернете, но ошибка ClassCastException для LdapProvider всегда останавливает выполнение. Я добавил набор конфигураций для "ldap-user-group-provider", который требует "composite-configurable-user-group-provider", "file-access-policy-provider" и "managed-authorizer", но не было разница.

Я убедился, что могу получить доступ к серверу LDAP со своей машины, и разрешил «домен» и «частный» доступ Java через брандмауэр Windows.

Я пробовал те же настройки в Windows 10 и Windows 11.

Я подключил к порту NiFi отладчик из Visual Studio 2019 Pro, но он практически остановил выполнение.

Я нашел исходный код класса LdapIdentityProvider, в котором считываются значения ldap-provider из файла login-identity-providers.xml. Должно быть INFO-сообщение, когда свойство «Стратегия идентификации» не установлено, но оно не прошло. (Я включил ведение журнала INFO с помощью этой строки в logback.xml: <logger name = "org.apache.nifi" level = "INFO" /> и получаю другие записи INFO.) Опять же, я не думаю, что выполнение заходит так далеко.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
71
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Мне удалось решить эту проблему, но я не уверен, что это исправило. Я считаю, что это была комбинация изменений.

В nifi.properties: nifi.security.user.authorizer=управляемый авторизатор

В авторизаторах.xml: Я удалил авторизатор ldap-провайдера, который, очевидно, добавил, чтобы попытаться обойти более раннюю ошибку, в которой говорилось, что он не определен. Я также включил определение управляемого авторизатора и настроил поставщика политики доступа к файлам с нашим исходным идентификатором администратора.

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