引言
Hello 大家好
之前和大家分享了关于OpenFeign
在某些场景下的一些处理和使用方法,而今天Anyin再次解锁了OpenFeign
的又一个使用场景,只能说真香。
在我们日常开发中,相信大家都会接触过对接第三方系统。对接第三方系统最烦人的工作可能就是刚开始对接的时候关于认证、加密、验签、JSON正反序列化等一系列的操作了。
我们知道OpenFeign
它其实是一个http的客户端,主要的应用场景就是在微服务体系内进行微服务之间的相互调用;那么它是不是也可以实现第三方调用?
很明显是可以的!!!
需求分析
在验证我们的观点:OpenFeign
可以实现第三方系统的调用之前,我们先找一个公开的第三方系统协议进行一波简单的需求分析吧。
这里我们使用中电联(中国电力企业联合标准)的协议文档为例。这里附上下载地址,有需要的同学可以自取。
以下为协议文档对于密钥的要求。
通过查看协议文档,我们知道整个对接过程会设计到以下几个需求:
- 调用方式统一使用POST方式
- 传输格式使用JSON
- 传输过程业务数据需要进行加密
- 传输过程整包数据需要生成签名,因为服务端会进行验签,保证数据没有被篡改
- 在进行第三方调用的时候需要像调用其他本地的
Service
一样丝滑(行为一致)
业务实现
为了通过OpenFeign
实现以上需求,我们首先定义一个配置类,用于自定义客户端的配置类。
@Configuration(proxyBeanMethods = false)
@EnableConfigurationProperties(CECOperatorProperties.class)
public class CECFeignClientConfig implements RequestInterceptor {
@Autowired
private CECOperatorProperties properties;
@Override
public void apply(RequestTemplate requestTemplate) {}
}
复制代码
- 实现
RequestInterceptor
接口,这里是为了在进行认证拿到access_token
之后,可以通过拦截器在header头放入对应的token信息 - 注入
CECOperatorProperties
属性,对于加解密、验签等操作需要的一些秘钥信息,从配置中心获取后,注