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

通过重写DiscoveryClient.DiscoveryClientOptionalArgs为Eureka发现客户端设置自定义信任存储时出错

朱风史
2023-03-14

我正在将spring boot项目从旧版本(2.2.9.RELEASE spring Cloud HOXTON.SR12)升级到v2.6.1 spring Cloud 2021.0.0

我目前遇到的问题是支持信任商店的Eureka客户端。在我的旧版本中,所有eureka注册应用程序都将使用import org.springframework.cloud.client.discovery。EnableDiscoveryClient 并用EnableDiscoveryClient标记

要使用自定义信任存储,我将在配置类中包含以下bean:

  @Bean
  public DiscoveryClient.DiscoveryClientOptionalArgs getTrustStoredEurekaClient(SSLContext sslContext) {
    DiscoveryClient.DiscoveryClientOptionalArgs args = new DiscoveryClient.DiscoveryClientOptionalArgs();
    args.setSSLContext(sslContext);
    return args;
  }
 

  @Bean
  public SSLContext sslContext() throws Exception {
    return new SSLContextBuilder().loadTrustMaterial(new File(trustStore).toURI().toURL(), trustStorePassword.toCharArray()).build();
  }

使用导入com.netflix.DiscoveryClient

升级后,任何尝试使用此自定义信任库的微服务都不会启动,出现以下错误:

***************************应用程序启动失败

描述:

字段optionalArgs在org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration$刷新EurekaClientConfiguration需要一个无法找到的类型为'com.netflix.discovery.AbstractDiscoveryClientOptionalArgs'的bean。

注入点有以下注释:

  • @org.springframework.beans.factory.annotation.自动装配(必需=true)

行动:

考虑定义“com.netflix.discovery”类型的bean。AbstractDiscoveryClientOptionalArgs在您的配置中。

如果我尝试在类型为DiscoveryClientOptionalArgs的单独bean中自动编写并将上下文设置为该类型,这似乎无关紧要,但我目前无法解决这个问题。

共有1个答案

淳于博
2023-03-14

我可以通过在网关的application.properties中设置以下内容来解决此问题:

eureka.client.tls.enabled=true
eureka.client.tls.key-store=file:<path-to-key-store>
eureka.client.tls.key-store-password=<password>
eureka.client.tls.keyStoreType=PKCS12
eureka.client.tls.keyPassword=<password>
eureka.client.tls.trust-store=file:<path-to-trust-store>
eureka.client.tls.trust-store-password=<password>

我不清楚的是,为什么需要设置信任库之外的密钥库(如上所述,只需要为使用Zuul的早期版本的DiscoveryClient覆盖的SSL上下文配置信任库),这表明我还没有完全理解这里到底发生了什么。

 类似资料:
  • 服务发现是基于微服务架构的关键原则之一。尝试配置每个客户端或某种形式的约定可能非常困难,可以非常脆弱。Netflix服务发现服务器和客户端是Eureka。可以将服务器配置和部署为高可用性,每个服务器将注册服务的状态复制到其他服务器。 如何包含Eureka客户端 要在您的项目中包含Eureka客户端,请使用组org.springframework.cloud和工件ID spring-cloud-st

  • 摘要:Java选项允许Java使用计算机帐户的Windows信任存储。什么选项允许它对用户帐户使用Windows信任存储? 我们有一个在Windows客户端上运行的Java应用程序。应用程序从各种来源获取数据,其中一些来源使用的证书不在默认的文件中。 当用户选择访问外部数据的项目时,系统会提示他们下载外部站点的证书。由于我们的安全设置,文件对用户是只读的。由于JRE无法将证书导入,因此无法下载外部

  • 我使用Jersey 1.0 http客户端调用资源并反序列化响应JSON,如下所示: 现在响应JSON有了一些新字段,我得到了以下异常: 如何将jackson的反序列化模式更改为NON-STRICT,以便它忽略新字段?

  • 我们有一个java客户端(mule app),它使用hornetq客户端(v2.3.25)。SP20)用于通过JNDI命名服务器(端口1099)连接到HornetQ远程服务器。连接用SSL保护。驱动程序要求显式设置javax.net.ssl.trustStore属性。否则,它不会找到信任存储。 我们想为会话指定一个自定义信任库。但是设置全局属性javax.net.ssl.trustStore可能会

  • 我目前正在使用Weblogic 12c(12.1.1.0)。我有一个特殊的问题,我无法解决它。我已将服务器配置为使用自定义密钥存储和信任存储。我用的是-Djavax。网调试=用于调试的ssl。当服务器启动时,部署的应用程序使用https连接到另一个应用程序进行验证。在此连接过程中,使用自定义信任存储验证其证书。 验证按预期完成,然后服务器启动而不报告任何错误。现在,一旦我访问IE上的应用程序并执行

  • 问题内容: 我正在尝试建立与trackobot.com的连接以接收一些JSON数据。服务器仅允许通过HTTPS / SSL进行连接。这是代码: openSteam抛出javax.net.ssl.SSLHandshakeException:收到致命警报:handshake_failure 我通读了与类似问题有关的几篇文章,但没有任何建议可以帮助您。适当的证书在我的信任库中。例如,当我尝试连接到goo