![](/img/trans.png)
[英]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.