本文主要讲解开放接口设计,主要是以SpringBoot web 项目,基于自定义注解+反射+非对称加密RSA签名等实现的灵活的统一开放接口设计,文末附源码地址。
互联网公司随着业务的发展,系统间或多或少会开放一些对外接口,这些接口都会以API的形式提供给外部。
为了方便统一管理,统一鉴权,统一签名认证机制,流量预警等引入了统一网关。API网关是一是对外接口唯一入口。
除了业务功能还需要有
- 统一鉴权
- 流量监控
- 路由分发
- 架构简单易懂,方便维护
- 方便追加功能,不需要重复写鉴权等逻辑代码
对外开放的接口,数据安全性是第一位
- 如何保证安全通信,防止数据被恶意篡改等攻击呢?
- 怎么证明是你发的请 求呢?
比较流行的方式一般是
- 加密 -> 密文传输,接收方需要解密
- 加签 -> 双方建立秘钥-请求方加签,接收方验签防止数据中途被篡改
# 3.开放接口设计 本文用到的主要技术点
- 反射机制
- RSA签名算法
- SpringBoot
- Hibernate-validator注解式参数校验
公共参数
返回内容
这里是使用的是RSA签名
规则如下:
- 签名参数剔除sign_type 、 sign ;
- 将剩余参数第一个字符按照ASCII码排序(字母升序排序),遇到相同字母则按第二个字符ASCII码排序,以此类推;
- 将排序后的参数按照组合“参数=参数值”的格式拼接,并用&字符连接起来,生成的字符串为待签名字符串;
- 使用RSA算法通过私钥生成签名
RSA === SHA1 --> base64
RSA2 === SHA256 --> base64
注:源码见文章末,依赖这里只简单列出了父pom中部分依赖,,详见源码
工程结构图:
3.3.1Maven依赖
3.3.2配置文件
3.3.3自定义注解
开放接口实现类注解
3.3.4API接口初始化容器与扫描器
3.3.5API请求处理客户端
作用说明:统一网关controller中调用一下方法进行验签与执行相应的业务方法。
3.3.6启动类
3.3.7统一异常处理
3.3.8统一网关controller
3.3.9测试实战DEMO
入参BO
测试service接口
注意:注解@OpenApi 使用 ,method就是入参中的方法
测试接口实现类
3.4.1不验签连通性测试
注:为了方便调试先将配置文件中的验签开关修改为 false
正常访问
异常情况
3.4.2验签测试
将配置文件验签开关开启
由于签名是根据私钥+动态的参数根据规则生成的,在PostMan上测试还得先生成签名,在源码文件中有一个测试Demo如下
带签名正常访问
签名异常情况下访问
- 通过以上方式实现的统一网关,在后续添加业务的时候,只需要添加对应的service,并加好相应注解即可。
- 目前配置的参数入参默认是下划线方式,如果业务中要用驼峰,可以改以下方法。
- com.open.api.config.gateway.ApiClient#invoke
- 目前配置的是,默认下划线方式,参考了大厂的开放接口,大部分都是下划线方式的参数
- 需要自定义业务接口请参考 3.3.9测试实战DEMO。
因为使用反射方式调用方法,所以自定义接口的时候也需要遵循规范,参数为2个
参数1 String requestId,
参数2 业务类型对象参数,实际是 网关入口,content 内容JSON转换后的对象参数。
源码地址:传送门
关注程序员小强公众号更多编程趣事,知识心得与您分享
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/4985.html