[英]java.security.auth.login.config file in path with space
[英]spring boot jar not connecting to Kafka brokers ( setting client_jaas.conf through he system variable java.security.auth.login.config)
我有一個 spring boot/spring-kafka 應用程序,它在作為 war 文件部署到外部 tomcat 服務器時正確使用消息,我將 java.security.auth.login.config 環境變量設置為具有用戶的 client_jaas.conf 文件名稱和密碼如下。 現在我正在嘗試將相同的應用程序部署到本地 Docker 容器作為 jar 使用內部 tomcat 服務器,看起來它沒有連接到 Kafka 代理,據我所知它沒有找到 client_jaas.conf 文件。 有沒有辦法在 application.properties 文件中配置 client_jaas.conf 或提及用戶名、密碼等的方法,以便我可以獲得 Kafka 代理的身份驗證。
client_jaas.conf:
KafkaClient {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="usse_name"
password="pwd123";
};
在 docker 上部署 jar 時,甚至當我從命令提示符運行 jar 時,我在下面遇到此異常:
Caused by: org.apache.kafka.common.KafkaException: Failed to construct kafka consumer
at org.apache.kafka.clients.consumer.KafkaConsumer.<init>(KafkaConsumer.java:827)
at org.apache.kafka.clients.consumer.KafkaConsumer.<init>(KafkaConsumer.java:629)
at org.springframework.kafka.core.DefaultKafkaConsumerFactory.createKafkaConsumer(DefaultKafkaConsumerFactory.java:207)
at org.springframework.kafka.core.DefaultKafkaConsumerFactory.createConsumerWithAdjustedProperties(DefaultKafkaConsumerFactory.java:193)
at org.springframework.kafka.core.DefaultKafkaConsumerFactory.createKafkaConsumer(DefaultKafkaConsumerFactory.java:167)
at org.springframework.kafka.core.DefaultKafkaConsumerFactory.createConsumer(DefaultKafkaConsumerFactory.java:141)
at org.springframework.kafka.listener.KafkaMessageListenerContainer$ListenerConsumer.<init>(KafkaMessageListenerContainer.java:607)
at org.springframework.kafka.listener.KafkaMessageListenerContainer.doStart(KafkaMessageListenerContainer.java:329)
at org.springframework.kafka.listener.AbstractMessageListenerContainer.start(AbstractMessageListenerContainer.java:340)
at org.springframework.kafka.listener.ConcurrentMessageListenerContainer.doStart(ConcurrentMessageListenerContainer.java:176)
at org.springframework.kafka.listener.AbstractMessageListenerContainer.start(AbstractMessageListenerContainer.java:340)
at org.springframework.kafka.config.KafkaListenerEndpointRegistry.startIfNecessary(KafkaListenerEndpointRegistry.java:312)
at org.springframework.kafka.config.KafkaListenerEndpointRegistry.start(KafkaListenerEndpointRegistry.java:257)
at org.springframework.context.support.DefaultLifecycleProcessor.doStart(DefaultLifecycleProcessor.java:182)
... 22 common frames omitted
Caused by: org.apache.kafka.common.KafkaException: java.lang.IllegalArgumentException: No serviceName defined in either JAAS or Kafka config
at org.apache.kafka.common.network.SaslChannelBuilder.configure(SaslChannelBuilder.java:160)
at org.apache.kafka.common.network.ChannelBuilders.create(ChannelBuilders.java:146)
at org.apache.kafka.common.network.ChannelBuilders.clientChannelBuilder(ChannelBuilders.java:67)
at org.apache.kafka.clients.ClientUtils.createChannelBuilder(ClientUtils.java:99)
at org.apache.kafka.clients.consumer.KafkaConsumer.<init>(KafkaConsumer.java:741)
... 35 common frames omitted
Caused by: java.lang.IllegalArgumentException: No serviceName defined in either JAAS or Kafka config
at org.apache.kafka.common.security.kerberos.KerberosLogin.getServiceName(KerberosLogin.java:301)
at org.apache.kafka.common.security.kerberos.KerberosLogin.configure(KerberosLogin.java:92)
at org.apache.kafka.common.security.authenticator.LoginManager.<init>(LoginManager.java:60)
at org.apache.kafka.common.security.authenticator.LoginManager.acquireLoginManager(LoginManager.java:111)
at org.apache.kafka.common.network.SaslChannelBuilder.configure(SaslChannelBuilder.java:149)
我不確定我是否遺漏了什么,或者我是否應該按照某種方式將我的 client_jaas.conf 作為獨立文件或將其放在應用程序屬性文件中。 我正在使用非安全端口連接到 Kafka 代理
請幫忙。
我遇到了完全相同的問題。結果在我的本地(在 IDE 中)它只是沒有找到 *.conf 文件在預期路徑上可見。
選項 1:如 Gary 所說,提供 KafkaJaasLoginModuleInitializer bean。
選項 2:搞亂系統屬性
@Configuration
public class KerberosConfig {
@Value("${java.security.krb5.conf}")
private String krb5Conf; // path to your krb5.conf
@Value("${java.security.auth.login.config}")
private String authConfig; // path to you jaas-client-$profile.conf
/**
* This implementation configures the run time environment with the relevant
* Kerberos security properties.
*/
@PostConstruct
public void setProperty() {
System.setProperty("java.security.krb5.conf", krb5Conf);
System.setProperty("java.security.auth.login.config", authConfig);
}
}
請參閱文檔。 您可以使用KafkaJaasLoginModuleInitializer
@Bean
配置 JAAS。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.