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

背景

最近在实现一个远程构建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

你可能感兴趣的:(feign调用https接口)