网关
网关运行分析报告
网关运行分析报告 - 2025-02-15
网关运行分析报告 - 2025-02-22
网关运行分析报告 - 2025-02-28
1.shenyu网关内外网使用
2.shenyu网关的具体使用
记一次网关线上问题之icsp访问ERP
再次思考多套ak/sk同时访问同一资源路径问题
网关接入说明
网关接入说明补充
网关分配各系统命名
网关BUG及二开
网关管理端访问地址
修改requestBody与responseBody
shenyu工程理解
获取requestBody异步问题
shenyu工程部署
排查sign插件报错500问题
shenyu数据结构设计
shenyu网关请求过程
shenyu自定义插件
记一次网关线上问题----网关无法对外提供服务
网关插件更新报错问题
网关中grayTag的使用
Exceeded limit on max bytes to buffer : 262144
网关中Divide插件中Selector中Handler中配置丢失问题
网关请求下游系统时长记录
通用测试:获取网关的sign值
网关分发主数据设想方案
铁骑主数据分发机制完善
27.GTMS&ITMS与gateway的关系
28.ZPI与gateway的关系
26.网关验签场景
29.PC端空值,服务端正常请求
30.网关requestMaxSize值
31.跨系统跨语言日志链路追踪
32.网关异步分发讨论
33.网关LoggingConsole丢失日志排查
34.网关升级shenyu-admin
35.网关异步分发插件 - 接入文档
本文档使用「觅思文档专业版」发布
-
+
首页
网关接入说明
## 0.网关接入说明 网关访问网址 | | 内部网关 | 外部网关 | | --- | --- | --- | | UAT | https://tsg-uat-internal.tqsys.cn | https://tsg-uat-external.tqls.cn | | VER | https://tsg-ver-internal.tqsys.cn | https://tsg-ver-external.tqls.cn | | PROD | https://tsg-prd-internal.tqsys.cn | https://tsg-prd-external.tqls.cn | 说明:内部系统接入内部网关,外部系统经过讨论后访问外部网关。 ## 1.鉴权 请求网关域名需要鉴权,鉴权步骤如下 ### 1.1 申请AK与SK AK/SK由服务方(网关)来进行分配,使用方向服务方申请,例如服务方分配的的AK为: 1TEST123456781 ;SK为:506EEB535CF740D7A755CB4B9F4A1536。 ### 1.2 访问接口路径 访问接口路径如:/api/service/abc。 ### 1.3 获取签名值 #### 1.3.1 内部自研系统(或外部java语言系统) 1.集成jar包 ``` <dependency> <groupId>com.techlex.web.common</groupId> <artifactId>public-common</artifactId> <version>0.1.1</version> </dependency> ``` 2.调用样例 ``` public static void main(String[] args) throws Exception { String server = ""; String appKey = ""; String appSecret = ""; String path = ""; String timestamp = String.valueOf(LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli()) GateWaySign gateWaySign = new GateWaySign(server,appKey,appSecret); String sign = gateWaySign.getSign(timestamp,path); } ``` 如上就获取到签名值 #### 1.3.2 外部非java语言系统 如下是java语言样例,供其他语言参考 1.通用参数介绍 字段|值|描述 ---|---|--- timestamp|当前时间戳(13位,String类型)|当前时间的毫秒数(有效期5分钟,即网关会过滤掉5分钟之前的请求) path|/api/service/abc|访问的接口路径(根据访问网关接口自己变更) version|1.0.0|目前定为1.0.0 写死,String类型 对上述3个字段进行 key 的自然排序,然后进行字段与字段值拼接最后再拼接上 SK ,代码示例如下 2.代码示例流程 流程1:首先构造一个 Map 。 ```java Map<String, String> map = Maps.newHashMapWithExpectedSize(3); //timestamp为毫秒数的字符串形式 String.valueOf(LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli()) map.put("timestamp","1571711067186"); map.put("path", "/api/service/abc"); map.put("version", "1.0.0"); ``` 流程2:进行 Key 的自然排序,然后 Key,Value值拼接最后再拼接分配给你的 SK。 ```java List<String> storedKeys = Arrays.stream(map.keySet() .toArray(new String[]{})) .sorted(Comparator.naturalOrder()) .collect(Collectors.toList()); final String sign = storedKeys.stream() .map(key -> String.join("", key, params.get(key))) .collect(Collectors.joining()).trim() .concat("506EEB535CF740D7A755CB4B9F4A1536"); ``` 得到的 sign 值应该为:`path/api/service/abctimestamp1571711067186version1.0.0506EEB535CF740D7A755CB4B9F4A1536` 流程3:进行 MD5 加密后转成大写。 ```java DigestUtils.md5DigestAsHex(sign.getBytes()).toUpperCase() ``` 最终得到的值为:`A021BF82BE342668B78CD9ADE593D683` ## 2. 请求访问 ### 2.1 请求路径 假设访问接口路径:/api/service/abc。 则访问网关路径:{网关域名}/api/service/abc ### 2.2 请求头 设置header头部参数: 字段|值|描述 ---|---|--- timestamp|时间戳|必填,上述你进行签名的时候使用的时间值,eg:1571711067186 appKey|AK值|必填,分配给你的AK值,eg:1TEST123456781 sign|签名值|必填,上述得到的签名值,eg:A90E66763793BDBC817CF3B52AAAC041 version|1.0.0|必填,目前固定这个值 SSystem|源系统标识|必填,如CCS、SRM等,由网关指定 DSystem|目标系统标识|必填,如CCS、SRM等,由网关指定 GUID | 全局唯一标识符|必填,推荐样例:B4FC1D30-87DF-5088-ED53-B1E0D384DC3A | ### 2.2 请求样例 #### 2.2.1 请求路径 例如CCS请求SRM的/api/service/abc接口。 则请求路径为:https://tsg-dev.tqsys.cn/api/service/abc #### 2.2.2 请求header 请求header为: | key | value | | --- | --- | | timestamp | 1571711067186 | | appKey | 1TEST123456781 | | sign | A90E66763793BDBC817CF3B52AAAC041 | | version | 1.0.0 | | SSystem | CCS | | DSystem | SRM | | GUID | 全局唯一标识符(推荐样例:B4FC1D30-87DF-5088-ED53-B1E0D384DC3A) | #### 2.2.3 请求参数 参考接口卡的实际业务参数 ### 2.3 网关常见报错 ``` { "code": 401, "message": "sign parameters are incomplete!" "message": "signature value is error!" } 网关的签名值不完整,请按照如下步骤排查 1.appKey与AppSecret是否设置正确 2.鉴权代码是否没有问题 ``` ``` { "code": -107, "message": "divide:Can not find selector, please check your configuration!" } 请检查 DSystem:SRM 是否设置正常 ``` ``` { "code": -102, "message": "divide:Rule not found!" } 请检查divide插件规则器中是否配置有请求路径 ``` ``` { "code": -119, "message": "Can not find healthy upstream url, please check your configuration!", "data": T } 网关管理员检查divide插件的selector的status,改成open ``` ``` { "code": 500, "message": "Internal Server Error" } 两种情况: 1>下游系统本身响应存在问题 2>网关请求下游系统超时,查看elk日志,发现 ERROR org.apache.shenyu.plugin.httpclient.AbstractHttpClientPlugin:88 - traceId: ,GUID: ,DSystem: ,SSystem: Response took longer than timeout: PT3S java.util.concurrent.TimeoutException: Response took longer than timeout: PT3S at org.apache.shenyu.plugin.httpclient.AbstractHttpClientPlugin.execute(AbstractHttpClientPlugin.java:86) 如上日志说明是网关的超时时间是3s,下游系统的响应时间超过了3s,因此抛出如上错误! ``` ``` { "code": 200, "message": "success", "data": T } 认证成功,code为200,data为返回实际数据对象,格式如下 ``` ### 2.修改记录 日期|修改人|修改内容| ---|---|--- 2022年08月16号|李贤利|新建文档 2024年10月21号|李贤利|请求header中新增GUID 2024年11月21号|李贤利|完善网关内外网访问地址
李贤利
2025年3月28日 09:47
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
Word文件
PDF文档
PDF文档(打印)
分享
链接
类型
密码
更新密码
有效期