Kafka TopicAuthorizationException из-за неправильного jaas.conf - PullRequest
2 голосов
/ 10 октября 2019

Я имею в виду Файл конфигурации входа в систему JAAS . В нем рассказывается о двух способах указания файла конфигурации входа в систему:

  1. Первый подход, в котором мы устанавливаем jaas.conf через виртуальную машину arg java.security.auth.login.config.
  2. Второй черезФайл свойств безопасности - это файл java.security, расположенный в каталоге lib/security JRE. Во втором подходе мы можем указать несколько файлов.

Есть ли способ указать несколько файлов jaas.conf, используя первый подход настройки VM arg java.security.auth.login.config? Или, если у вас есть другие предложения по решению проблемы.

Справочная информация: Проблема, с которой я сталкиваюсь: у нас есть два различных типа событий Кафки (скажем, ABC и XYZ ) и соответствующие им jaas.conf с diffrent Keytab и main . Когда он хочет опубликовать ABC , он устанавливает для свойства java.security.auth.login.config значение ABC jaas.conf и изменяет значение XYZ на jaas.conf , когда мы хотим опубликовать это.

Однако вышеупомянутая логика имеет некоторую проблему, и она терпит неудачу с org.springframework.kafka.core.KafkaProducerException: Failed to send; nested exception is org.apache.kafka.common.errors.TopicAuthorizationException: Not authorized to access topics для второго события, которое она пытается опубликовать. Первоначальный взгляд на причину выглядит так, что даже для второго события он пытается использовать jaas.conf первого.

Stacktrace:

org.springframework.kafka.core.KafkaProducerException: Failed to send; nested exception is org.apache.kafka.common.errors.TopicAuthorizationException: Not authorized to access topics: [XYZ]
    at org.springframework.kafka.core.KafkaTemplate$1.onCompletion(KafkaTemplate.java:341)
    at org.apache.kafka.clients.producer.KafkaProducer.doSend(KafkaProducer.java:827)
    at org.apache.kafka.clients.producer.KafkaProducer.send(KafkaProducer.java:768)
    at org.springframework.kafka.core.DefaultKafkaProducerFactory$CloseSafeProducer.send(DefaultKafkaProducerFactory.java:272)
    at org.springframework.kafka.core.KafkaTemplate.doSend(KafkaTemplate.java:327)
    at org.springframework.kafka.core.KafkaTemplate.send(KafkaTemplate.java:197)
...