簡體   English   中英

無法找到 LoginModule class: org.apache.kafka.common.security.plain.PlainLoginModule 當 springboot 應用程序在 docker 容器上運行時

[英]unable to find LoginModule class: org.apache.kafka.common.security.plain.PlainLoginModule when the springboot app is run on docker container

我有一個 spring 引導應用程序使用spring-kafka依賴項向 kafka 發布消息,kafka 配置使用標准的 kafka.properties.sasl.jaas.config 對 kafka 服務器進行身份驗證,該應用程序能夠運行並發布消息當在 intelliJ IDEA 上運行但相同的代碼時,當我通過構建容器使用 docker-compose 運行時,它無法發布包含以下日志的消息。

org.apache.kafka.common.KafkaException:無法在 org.apache.kafka.clients.producer.KafkaProducer 構建 kafka 生產者。(KafkaProducer.java:434)~[kafka-clients-2.5.0.88200288:8901]na 在 org.apache.kafka.clients.producer.KafkaProducer.(KafkaProducer.java:287) ~[kafka-clients-2.5.0.jar:na]

引起:javax.security.auth.login.LoginException:無法找到 LoginModule class:org.apache.kafka.common.security.plain.PlainLoginModule | 在 javax.security.auth.login.LoginContext.invoke(LoginContext.java:794)~[na:1.8.0_212] | 在 javax.security.auth.login.LoginContext.access$000(LoginContext.java:195) ~[na:1.8.0_212] | 在 javax.security.auth.login.LoginContext$4.run(LoginContext.java:682) ~[na:1.8.0_212] | 在 javax.security.auth.login.LoginContext$4.run(LoginContext.java:680) ~[na:1.8.0_212] | 在 java.security.AccessController.doPrivileged(本機方法)~[na:1.8.0_212] | 在 javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:680) ~[na:1.8.0_212] | 在 javax.security.auth.login.LoginContext.login(LoginContext.java:587) ~[na:1.8.0_212] | 在 org.apache.kafka.common.security.authenticator.AbstractLogin.login(AbstractLogin.java:60) ~[kafka-clients-2.5.0.jar:na] | 在 org.apache.kafka.common.security.authenticator.LoginManager.(LoginManager.java:62) ~[kafka-clients-2.5.0.jar:na] | 在 org.apache.kafka.common.security.authenticator.LoginManager.acquireLoginManager(LoginManager.java:105) ~[kafka-clients-2.5.0.jar:na] | 在 org.apache.kafka.common.network.SaslChannelBuilder.configure(SaslChannelBuilder.java:158)~[kafka-clients-2.5.0.jar:na]

在這個問題上有點晚了,我希望有人會覺得這很有用。

依賴關系可能在那里。 但是,您可以通過調用以下命令“強制”類加載器選擇正確的類:

final ClassLoader currentClassLoader = Thread.currentThread().getContextClassLoader();

try {
    Thread.currentThread().setContextClassLoader(null);
    Thread.currentThread().setContextClassLoader(KafkaProducer.class.getClassLoader());
    // PRODUCER INVOCATION HERE
} finally {
    Thread.currentThread().setContextClassLoader(currentClassLoader);
}

這類似於此處提出的問題: Kafka Producer - org.apache.kafka.common.serialization.StringSerializer could not be found

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM