- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试为一个使用 SSL 的外部 HTTP API 创建一个 FeignClient。困难在于——如何使用我的逻辑修改默认的 Spring FeignClient,在本例中为 SSL Connection Factory。所以基本上我想保留 Spring 自动为 FeignClients 做的所有好事,比如 Hystrix、Sleuth 跟踪等,并让它与我的 SSL 工厂一起工作。
将不胜感激任何建议。
这是我尝试做的:
我尝试在 ComponentScan 之外提供自定义的@Configuration:
@Configuration
public class CustomFeignConfiguration
{
@Bean
public Feign.Builder feignBuilder()
{
Client trustSSLSockets = new Client.Default(
TrustingSSLSocketFactory.get("server1"),
new NoopHostnameVerifier());
log.info("feignBuilder called");
return Feign.builder().client(trustSSLSockets);
}
...
}
通过注解让FeignClient使用
@FeignClient(name = "sslClient", configuration = CustomFeignConfiguration.class, url = "https://...")
其中“TrustingSSLSocketFactory”的实现类似于this .
现在,如果我在 Spring 应用程序中注入(inject)我的客户端,我可以看到调用了“feignBuilder”并且它成功加载了我的 key 。问题在于创建的客户端实际上并未将指定的 SSLFactory 用于 createSocket 调用。所以我得到:
Caused by: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure
at sun.security.ssl.Alerts.getSSLException(Alerts.java:192) ~[na:1.8.0_72]
at sun.security.ssl.Alerts.getSSLException(Alerts.java:154) ~[na:1.8.0_72]
at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:2023) ~[na:1.8.0_72]
at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1125) ~[na:1.8.0_72]
at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375) ~[na:1.8.0_72]
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403) ~[na:1.8.0_72]
at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387) ~[na:1.8.0_72]
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559) ~[na:1.8.0_72]
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185) ~[na:1.8.0_72]
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1513) ~[na:1.8.0_72]
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1441) ~[na:1.8.0_72]
at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480) ~[na:1.8.0_72]
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:338) ~[na:1.8.0_72]
at feign.Client$Default.convertResponse(Client.java:152) ~[feign-core-9.3.1.jar:na]
最佳答案
创建 Client
,因为它是自己的 @Bean
而不是构建器的一部分。 builder.client(client)
稍后被调用,覆盖您在创建构建器时设置的客户端。
所以
@Bean
public Client feignClient()
{
Client trustSSLSockets = new Client.Default(
TrustingSSLSocketFactory.get("server1"),
new NoopHostnameVerifier());
log.info("feignClient called");
return trustSSLSockets;
}
关于java - Spring 启动: FeignClient with SSL (p12),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40853829/
我想使用 @FeignClient(url=...) 并使其直接转到给定的 url,而不是从功能区配置中获取主机。 我知道在 spring-cloud 中 feign 默认与ribbon 和 eure
我正在尝试了解 Spring Boot 和 Hystrix,但无法让后备方法发挥作用。我尝试了两种方法,@HystrixCommand 和 @FeignClient。我可以获取 @HystrixCom
我正在尝试在我的 Multi-Tenancy 应用程序中实现假客户端概念。我有两个微服务。在其中一项微服务中,我编写了 API 来从数据库获取数据。我的其他微服务中需要这些数据。为此,我使用假客户端概
我的微服务需要使用双向 ssl。每个微服务都是一个 Spring Boot 应用程序,注释为: @SpringBootApplication @EnableFeignClients @EnableDi
我使用 Spring Cloud Netflix 来构建我的微服务。 @FeignClient(name = "ms-cloud",configuration = MsCloudClientConfi
是否可以通过 MockRestServiceServer(restTemplate) 模拟响应 FeignClient?这个例子不起作用: Application.class @SpringBootA
我在根据文档尝试 feignclient 回退时遇到问题。 假设 myFeignClient 无法连接到 myFeign @FeignClient(name = "myFeign", fallback
服务器使用request.getInputStream()获取请求正文。 客户端代码: @FeignClient(name="composer-agent") public interface Com
Spring Boot FeignClient 捕获业务异常信息 因项目重构采用spring cloud,feign不可避免。目前spring cloud在国内还不是很成熟,所以踩坑是免不了的。最
我在自动连接来自另一个项目的假客户端时遇到问题。似乎没有生成和注入(inject) feign 客户端的实现。 这是我遇到的错误。 org.springframework.beans.factory.
我的应用程序中有一个 @FeignClient: @FeignClient(name="${mongo.service.id}", url="${mongo.service.url}") public
我尝试使用多个查询字符串参数调用 Google API。奇怪的是,我找不到办法做到这一点。 这是我的 FeignClient : @FeignClient(name="googleMatrix", u
Feign 默认扩展器转换参数: final class ToStringExpander implements Expander { @Override public String
我 try catch 从 FeignClient 连接的另一个微服务收到的异常。我制作了自定义的 ErrorDecoder,并且 public class CustomErrorDecoder im
拥有 Feign 客户端: @FeignClient(name = "storeClient", url = "${feign.url}") public interface StoreClient
我有一个@FeignClient接口(interface): @FeignClient(name="${some.service.id}", url="${some.service.url}") pu
这是我的 FeignClient: @FeignClient(name="${mongo.service.id}", url="${mongo.service.url}", configuration
如何在spring的@feignclient配置中设置自定义最大连接池大小, @FeignClient(name = "content-cms", configuration = ContentCms
当我的 Spring Boot 应用程序初始化时,我需要使用 @Component @FeignClient(name = "xxx") 进行 bean 注入(inject),但它总是抛出这样的异常:
我在自动连接另一个项目的 feign 客户端时遇到问题。貌似没有生成和注入(inject)feign客户端的实现。 这是我遇到的错误。 org.springframework.beans.factor
我是一名优秀的程序员,十分优秀!