Java spring kafka 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

我如何使用SpringKafka(无sboot)进行SSL配置,例如,使用相对/类路径指定信任库的位置

它仅在提供绝对路径时工作


令人惊讶的是,当使用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启动时将密钥库复制到文件系统。(与其拥有卡夫卡自动配置的消费者工厂,不如拥有自己的消费者工厂)

  • 从属性中获取密钥存储的名称(因此密钥存储可以在DEV/INT/PROD阶段中命名为不同的名称)
  • 将其复制到k8n pod的文件系统中(如果在Windows上本地运行,则使用与“/tmp”不同的目标)
  • 使用文件系统中的新位置更新KafkaProperties
  • 
    @配置
    @所需参数构造函数
    公共级卡夫卡康菲{
    私人最终卡夫卡普财产卡夫卡普;
    @豆子
    @条件属性(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支持从类路径读取信任存储。在那里的评论中似乎有一个变通方法。