feign调用https接口_Feign支持Https协议

本文介绍了如何使用Feign调用HTTPS接口,通过自定义Feign配置,包括设置SSLSocketFactory和HostnameVerifier。具体实现包括创建FeignClient,配置FeignHttpsConfig以信任所有SSL证书,禁用主机名验证,以及设置日志级别为FULL,以全面记录请求和响应详情。
摘要由CSDN通过智能技术生成

背景

最近在实现一个远程构建Docker镜像的功能。用户在前端页面触发镜像构建后,后端服务调用远程服务执行构建脚本。之后,后端服务循环访问 DockerHub 的REST接口(/v2/{image}/tags/list),判断目标镜像是否已经生成,从而更新前端构建状态。

后端服务使用Feign访问 DockerHub,DockerHub 接口使用的Https协议。

代码实现

FeignClient定义

在@FeignClient注解中指定feign client自定义配置。自定义配置中可以重写 feign.Client、feign.codec.Decoder、feign.codec.Encoder、feign.Contract 的实现方式。这些配置仅对当前的FeignClient有效。

@FeignClient(name = "docker-client", configuration = FeignHttpsConfig.class, url = "https://docker2.yidian.com:5000")

public interface DockerClient {

@GetMapping("/v2/{image}/tags/list")

ImageTags getTags(@PathVariable("image") String image);

}

FeignHttpsConfig定义

在FeignHttpsConfig中重写了Feign.Builder、feign.Client、Logger.Level 的配置。其中指定了feign.Client 所使用的SSLSocketFactory和HostnameVerifier。

下面对各个类做一下简单介绍:

Feign.Builder:是feign.Client的建造者,用于建造feign.Client实例;

feign.Client:feign客户端,用于提交Http/Https请求;

Logger.Level:当前FeignClient日志输出级别;文章末尾有详细描述;

SSLSocketFactory:SSLSocket工厂;SSLSocket扩展了Socket并提供使用SSL或TLS协议的安全套接字。这种套接字是正常的流套接字,但是它们在基础网络传输协议(如TCP)上添加了安全保护层。

HostnameVerifier:实现主机名验证功能;在握手期间,如果URL的主机名和服务器的标识主机名不匹配,则验证机制可以回调此接口实现程序来确定是否应该允许此连接,如果回调内实现不恰当,默认接受所有域名,则有安全风险;

NoopHostnameVerifier:是HostnameVerifier的实现类之一,作用是关闭主机名验证功能,并且永远不会抛出SSLException。

@Configuration

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用Feign调用HTTPS接口,需要在Feign的配置中启用HTTPS支持。具体步骤如下: 1. 引入Feign的依赖 ``` <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> ``` 2. 配置FeignHTTPS支持 ``` @Configuration public class FeignConfig { @Autowired private ObjectFactory<HttpMessageConverters> messageConverters; @Bean public Client feignClient() { return new Client.Default(getSSLSocketFactory(), null); } private SSLSocketFactory getSSLSocketFactory() { try { SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, new TrustManager[] { new X509TrustManager() { public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {} public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {} public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0]; } } }, new SecureRandom()); return sslContext.getSocketFactory(); } catch (Exception e) { throw new RuntimeException(e); } } @Bean public Decoder feignDecoder() { return new ResponseEntityDecoder(new SpringDecoder(messageConverters)); } } ``` 其中,`getSSLSocketFactory`方法返回一个`SSLSocketFactory`对象,用于创建HTTPS连接。这里采用了忽略证书的方式,实际生产环境中应该使用可信的证书。 3. 在Feign接口中使用`https`协议 ``` @FeignClient(name = "example", url = "https://example.com") public interface ExampleClient { @GetMapping("/api") String get(); } ``` 其中,`url`参数指定了HTTPS协议的地址。 这样就可以使用Feign调用HTTPS接口了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值