Java spring kafka ssl类路径信任库
我如何使用SpringKafka(无sboot)进行SSL配置,例如,使用相对/类路径指定信任库的位置 它仅在提供绝对路径时工作Java spring kafka ssl类路径信任库,java,ssl,spring-kafka,Java,Ssl,Spring Kafka,我如何使用SpringKafka(无sboot)进行SSL配置,例如,使用相对/类路径指定信任库的位置 它仅在提供绝对路径时工作 令人惊讶的是,当使用spring boot运行时,它与相对路径(jar内)一起工作。该文件由Kafka而不是spring读取 Kafka不知道Spring的类路径资源抽象 我认为你对靴子的看法是错误的;只有当罐子爆炸时,它才能在那里工作;boot在kafkapproperties中有此代码 map.from(this::getTrustStoreLocatio
令人惊讶的是,当使用spring boot运行时,它与相对路径(jar内)一起工作。该文件由Kafka而不是spring读取 Kafka不知道Spring的类路径资源抽象 我认为你对靴子的看法是错误的;只有当罐子爆炸时,它才能在那里工作;boot在
kafkapproperties
中有此代码
map.from(this::getTrustStoreLocation).as(this::resourceToPath)
.to(properties.in(SslConfigs.SSL_TRUSTSTORE_LOCATION_CONFIG));
...
private String resourceToPath(Resource resource) {
try {
return resource.getFile().getAbsolutePath();
}
catch (IOException ex) {
throw new IllegalStateException(
"Resource '" + resource + "' must be on a file system", ex);
}
}
要从jar中使用信任库,您需要先将其复制到文件系统(例如,
/tmp
),然后再启动应用程序上下文。我的补丁是在spring启动时将密钥库复制到文件系统。(与其拥有卡夫卡自动配置的消费者工厂,不如拥有自己的消费者工厂)
@配置
@所需参数构造函数
公共级卡夫卡康菲{
私人最终卡夫卡普财产卡夫卡普;
@豆子
@条件属性(value=“spring.kafka.enabled”,havingValue=“true”)
公共ConsumerFactory ConsumerFactory()引发IOException{
Path fileSystemKeyStorePath=Path.get(“/tmp”、“keystore.pfx”);
资源keyStoreLocationFromProperties=kafkaProps.getSsl().getKeyStoreLocation();
Files.copy(keyStoreLocationFromProperties.getInputStream(),
fileSystemKeyStorePath,StandardCopyOption。替换_现有);
Ssl Ssl=kafkapprops.getSsl();
setkeysterelocation(新的FileSystemResource(filesystemkeysterepath));
返回新的DefaultKafkaConsumerFactory(kafkaProps.buildConsumerProperties());
}
}
如果无法将其复制到文件系统,如何避免这种情况发生?Kafka支持从类路径读取信任存储。在那里的评论中似乎有一个变通方法。