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

spring-kafka-ssl类路径信任库

茅华灿
2023-03-14

例如,如何使用spring-kafka(不带sboot)进行SSL配置,使用相对/类路径指定信任库的位置?

仅当提供了绝对路径时,它才起作用。

令人惊讶的是,当使用Spring引导运行时,它可以使用相对路径(在jar内)。。

共有2个答案

嵇出野
2023-03-14

我对此的补丁是在Spring启动时将密钥库复制到文件系统。(而不是来自 KafkaAuto 配置的消费者工厂,而是拥有自己的消费者工厂)

  1. 从属性中获取密钥库的名称(因此密钥库可以在 DEV/INT/PROD 阶段中以不同的方式命名)
  2. 将其复制到 k8n pod 的文件系统中(如果在 Windows 上本地运行,请使用与“/tmp”不同的目标)
  3. 使用文件系统中的新位置更新 Kafka 属性。

    @Configuration
    @RequiredArgsConstructor
    public class KafkaConfig {
    
        private final KafkaProperties kafkaProps;
    
        @Bean
        @ConditionalOnProperty(value = "spring.kafka.enabled", havingValue = "true")
        public ConsumerFactory<?, ?> consumerFactory() throws IOException {
            Path fileSystemKeyStorePath = Paths.get("/tmp", "keystore.pfx");
    
            Resource keyStoreLocationFromProperties = kafkaProps.getSsl().getKeyStoreLocation();
            Files.copy(keyStoreLocationFromProperties.getInputStream(),
                fileSystemKeyStorePath, StandardCopyOption.REPLACE_EXISTING);
    
            Ssl ssl = kafkaProps.getSsl();
            ssl.setKeyStoreLocation(new FileSystemResource(fileSystemKeyStorePath));
    
            return new DefaultKafkaConsumerFactory(kafkaProps.buildConsumerProperties());
        }
    }
常永怡
2023-03-14

该文件由Kafka读取,而不是斯普林。

Kafka对Spring的类路径资源抽象一无所知。

我认为你对靴子的看法是错误的;只有在罐子爆炸的情况下才有效。boot在< code > kafk properties 中有以下代码...

    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中使用信任库,您需要在启动应用程序上下文之前,首先将其复制到文件系统(例如< code>/tmp)。

 类似资料:
  • 在这里的Spring Boot文档中,关于服务静态内容,它说: 默认情况下,Spring Boot将从类路径中名为/static(或/public或/resources或/META-INF/resources)的目录提供静态内容。 我发现目录中的所有内容: 将被复制到类路径中,因此我可以将我的静态内容放入: 一切都会很好,我很高兴,因为我可以将我的静态内容放在src目录下。 但是,我对此有一些疑问

  • 我正在尝试使用spring-ative来创建使用kafka ssl的Spring应用程序的本机映像。 但我有一个问题要通过Kafka信任库路径的绝对路径。 因为本机映像无法知道信任库路径的位置。 Spring靴:2.4.5 Spring原生:0.9.2 graalvm: graalvm-ce-java8-21.0.0.2 我的信任库文件位于以下路径中 Maven插件构建参数 构建并运行应用程序 那

  • 并将这些行添加到 但仍会出现以下错误: org.apache.kafka.common.errors.SerializationException:反序列化偏移量1处分区topic2-0的键/值时出错。如有需要,请通过记录继续使用。原因:java.lang.IllegalArgumentException:类“com.SpringMiddleware.Entities.Crime”不在受信任的包[

  • 问题内容: 这个特殊的前缀指定必须获取与给定名称匹配的所有类路径资源(内部,这实际上是通过ClassLoader.getResources(…)调用发生的),然后合并以形成最终的应用程序上下文定义。 有人可以解释吗? 使用和不使用星号有什么区别? 问题答案: 这只是意味着,将拾取类路径上所有jar中文件夹下的所有appContext.xml文件,并将其加入一个大的应用程序上下文中。 相反,将仅加载

  • 我需要为类构建映射(字面上是