当前位置: 首页 > 知识库问答 >
问题:

KafkaJava客户端:ClassLoader找不到SASL/Scram登录类

从渊
2023-03-14

构建一个SPI将事件推送到Kafka中,在Keycount 6.0.1中部署为EAR,它使用WildFly Server,打包在基于jboss/keycount:6.0.1的Docker映像中。

我碰到了:找不到Kafka Producer-org . Apache . Kafka . common . serialize . string serializer

因此,我应用了设置Thread.currentThread().setContextClassLoader(null)

这对于我在端口9092上的本地Kafka来说似乎很好,无需身份验证。一旦我按照此处所述进行身份验证:

String jaasTemplate = "org.apache.kafka.common.security.scram.ScramLoginModule required username=\"%s\" password=\"%s\";";
String jaasCfg = String.format(jaasTemplate, username, password);

Properties props = new Properties();
props.put("sasl.jaas.config", jaasCfg);
// ...
Thread.currentThread().setContextClassLoader(null);
KafkaProducer<String, String> producer = new KafkaProducer<>(props);

我遇到了错误:

org.apache.kafka.common.KafkaException: javax.security.auth.login.LoginException: unable to find LoginModule class: org.apache.kafka.common.security.scram.ScramLoginModule
    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.producer.KafkaProducer.newSender(KafkaProducer.java:441)
    at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:422)

我怀疑这是由于将类加载器设置为空引起的,但我不确定。

JAAS字符串提到这个org.apache.kafka.common.security.scraf.ScramLoginModule。我尝试不使用JAAS,而是使用简单的用户名密码,如下所示:

Properties props = new Properties();
props.put("sasl.username", username);
props.put("sasl.password", password);
// ...
Thread.currentThread().setContextClassLoader(null);
KafkaProducer<String, String> producer = new KafkaProducer<>(props);

但这也导致了一个例外,仅提及无法找到不同的类:

org.apache.kafka.common.KafkaException: javax.security.auth.login.LoginException: unable to find LoginModule class: org.jboss.as.security.remoting.RemotingLoginModule
    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.producer.KafkaProducer.newSender(KafkaProducer.java:441)
    at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:422)

我如何才能做到,org.apache.kafka.common.security.scrab。是否找到ScramLoginModule?谢谢


共有1个答案

洪伟兆
2023-03-14

警告:丑陋的黑客!

在创建KafkaProducer之前,设置如下所示的上下文类加载器:

Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
 类似资料:
  •  说明 调用方法: $.f2e.util.yy.isInstallYY(fn); 函数说明: UDB登陆 参数说明: 参数名 类型 说明 备注 fn function 回调函数 null为未登录YY客户端 无 脚本 <script> $.f2e.util.yy.isInstallYY(function(data){ if(data){ //有登录

  • 我正在保护Kafka与Kerberos在CDH 5.5Kafka版本:2.0.1Kerberos启用和工作正常 当我使用cloudera maneger在kafka中启用sasl时,会出现以下错误: 6月29日,3:02:42.875下午信息组织。阿帕奇。动物园管理员。客户CNXN 正在打开与服务器brahim的套接字连接。localhost/127.0。0.1:2181. 将尝试使用登录上下文部

  • 我有一个老项目,这是试图从谷歌分析检索数据。 它不起作用,所以我试图找出问题所在。 找到了在服务器端使用分析的示例代码。 它与我的测试帐户的秘密文件一起工作。但是它对一个老项目的秘密文件不起作用。我收到以下错误: 有什么问题?机密文件已过期?如果是,我可以在没有访问谷歌帐户的情况下收到另一个吗?

  • web应用程序的单点登录(SSO)(通过浏览器使用)已得到充分的证明和确立。为富客户端建立SSO比较困难,通常建议基于Kerberos票证,尤其是使用Windows登录域中的ActiveDirectory。 但是,我正在为以下问题寻找一个更通用的解决方案:我需要建立“真正的”SSO(所有应用程序的一个标识,即不仅仅是跨应用程序的密码同步),其中在客户端(非托管计算机,包括非Windows),“最终

  • 我正试图找出如何创建一个工作Kafka生产者对一个AWS MSK集群。集群启用了TLS和SASL/scram。这是我第一次使用Kafka,关于这方面的文档相当少。我目前拥有的针对未加密本地群集的代码是: 我有字符串类型变量和,它们是从AWS秘密管理器中提取的,包含集群的用户名和密码。我还需要指定哪些其他属性? AWS和Kafka网站上的文档都是关于在本地文件系统上生成JAAS和truststore

  • 我有一个用python实现的gRPC服务器,我正在从NodeJS调用RPC,但它给出了一个错误“找不到方法”。当我使用python客户端调用时,请求成功。 导入grpc import stream\u csv\u pb2 import urllib。来自urllib的请求。从并发导入期货导入HTTPError时出错,URLError