我有一个spring boot kafka客户端应用程序,其中有两个消费者在kafka中收听不同的主题和不同的消费者群。
为了实现,我需要下面有两个JAAS会议(使用不同的keytab文件)
dc-jaas-A.conf文件
KafkaClient {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
storeKey=true
useTicketCache=false
serviceName="kafka"
keyTab="testA.keytab"
principal="testA@domain.com";
};
dc-jaas-B.conf
KafkaClient {
com.sun.security.auth.module.Krb5LoginModule required
useKeyTab=true
storeKey=true
useTicketCache=false
serviceName="kafka"
keyTab="testB.keytab"
principal="testB@domain.com";
};
由于下面的connect tFactory在System.setProperty中设置dc-jaas-A.conf和dc-jaas-B.conf,该值被覆盖,结果我得到"org.apache.kafka.common.errors.TopicAuthorizationException"异常。
@Bean
public ProducerFactory<String, String> producerFactoryForA() {
System.setProperty("java.security.auth.login.config", "C:/Users/Files/dc-jaas-A.conf");
System.setProperty("java.security.krb5.conf","C:/Users/Files/krb5.conf");
Map<String, Object> configs = new HashMap<>();
configs.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
// more configs here
return new DefaultKafkaProducerFactory<>(configs);
}
@Bean
public ProducerFactory<String, String> producerFactoryForB() {
System.setProperty("java.security.auth.login.config", "C:/Users/Files/dc-jaas-B.conf");
System.setProperty("java.security.krb5.conf","C:/Users/Files/krb5.conf");
Map<String, Object> configs = new HashMap<>();
configs.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
// more configs here
return new DefaultKafkaProducerFactory<>(configs);
}
这是不可能的,至少在java 8中是这样。JAAS类在内部使用静态结构来维护kerberos配置。
每次在使用令牌之前,您都必须初始化/刷新krb配置。
另一个解决方法是对两个SPN使用相同的keytab文件。Keytab可以包含多个SPN条目。
我有Spring启动应用程序,它是接收静态数据,基于一些业务逻辑,我需要将数据转移到两个不同的kafka集群,它们有自己的kerberos密钥提及的jaas文件。 我已经编写了两个不同的生产者实例,在它们的不同对象实例中具有以下属性。 第二制片人 当我将其作为两个服务启动并仅启用生产者实例时,它可以工作,但当我在单个jar中启用两个实例时,只有一个生产者可以工作,其他生产者会遇到身份验证问题。 我
我已经使用
我有一个用maven作为构建工具的应用程序。 我正在使用maven概要文件从不同的概要文件设置不同的属性。 假设我运行带有out的maven,并指定我希望spring的任何其他概要文件,将和作为活动概要文件。
使用spring-boot-2.1.3、spring-kafka-2.2.4,我希望有两个流配置(例如,拥有不同的application.id,或者连接到不同的集群,等等)。因此,我几乎根据文档定义了第一个流配置,然后添加了第二个流配置,使用了不同的名称,以及第二个StreamsBuilderFactoryBean(也使用了不同的名称): 然而,当我尝试运行该应用程序时,我得到: 在org.spr
我试图连接到Kafka使用汇流。Kafka包。但是,我需要使用jaas作为身份验证方法。我找不到使用融合的方法。Kafka为。NET. 编辑: 我收到以下数据连接: 我试图建立这样的联系: 你们知道我怎么设置收到的Jaas吗?
我正在尝试对我的spring boot应用程序运行selenium测试。我想用我的应用程序的属性启动应用程序。yml和应用测试。yml定义。然而,默认情况下,这不会发生。 我试着按照Dave Syer的建议去做,并实现了一个Application ationContext初始器,它使用YamlProperty tySourceLoader读取application.yml和application-