接入说明

应用管理是WeBASE管理台提供的一种第三方应用接入功能。其他应用可以通过WeBASE通用API来开发自己的运维管理台。接入的步骤如下:

  1. 通过WeBASE管理平台获得注册信息,并通过API向WeBASE注册服务。
  2. 通过WeBASE提供的基础能力API和WeBASE连通。

应用集成SDK

SDK简介

WeBASE-APP-SDK是应用集成SDK,提供调用WeBASE-Node-Manager的接口,方便WeBASE管理台接入第三方应用。 ​ 从v1.5.1开始,提供应用集成SDK,方便应用接入。接口API可以查看WeBASE通用API。调用之前需要添加依赖和初始化应用信息。

  • v1.5.1及其以上版本,应用配置AppConfig的属性isTransferEncrypt需和WeBASE-Node-Manager的配置文件/conf/application.yml下的配置constant.isTransferEncrypt相同,默认为true
  • 如果v1.5.0需要使用SDK,应用配置AppConfig的属性isTransferEncrypt需设置为falsev1.5.1及其以上版本新增的接口调用不了。

添加依赖

  • 添加 SDK 的依赖,以Gradle为例
  1. repositories {
  2. maven { url "http://maven.aliyun.com/nexus/content/groups/public/" }
  3. maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
  4. }
  5. dependencies {
  6. implementation 'com.webank:webase-app-sdk:1.5.1-SNAPSHOT'
  7. implementation 'org.bouncycastle:bcprov-jdk15on:1.67'
  8. implementation 'org.apache.commons:commons-lang3:3.8.1'
  9. implementation 'com.squareup.okhttp3:okhttp:4.8.1'
  10. implementation 'com.fasterxml.jackson.core:jackson-databind:2.11.0'
  11. implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.11.0'
  12. implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.11.0'
  13. implementation 'com.fasterxml.jackson.module:jackson-module-parameter-names:2.11.0'
  14. implementation 'org.projectlombok:lombok:1.18.12'
  15. implementation 'org.apache.logging.log4j:log4j-api:2.13.3'
  16. implementation 'org.apache.logging.log4j:log4j-core:2.13.3'
  17. implementation 'org.apache.logging.log4j:log4j-slf4j-impl:2.13.3'
  18. }

配置说明

  • 应用配置
  1. public class AppConfig {
  2. // 节点管理服务地址
  3. private String nodeManagerUrl;
  4. // 应用Key
  5. private String appKey;
  6. // 应用密码
  7. private String appSecret;
  8. // 是否加密传输
  9. private boolean isTransferEncrypt;
  10. }
  • Http请求配置
  1. public class HttpConfig {
  2. // 连接超时(默认30s)
  3. private int connectTimeout;
  4. // 读取超时(默认30s)
  5. private int readTimeout;
  6. // 写超时(默认30s)
  7. private int writeTimeout;
  8. }

调用示例

完整示例请查看SDK示例

  1. public class ClientTest {
  2. // WeBASE-Node-Manager的url
  3. private static String url = "http://localhost:5001";
  4. private static String appKey = "RUPCNAsd";
  5. private static String appSecret = "65KiXNxUpPywVwQxM7SFsMHsKmCbpGrQ";
  6. private static boolean isTransferEncrypt = true;
  7. private static AppClient appClient = null;
  8. public static void main(String[] args) {
  9. try {
  10. initClient();
  11. appRegister();
  12. } catch (Exception e) {
  13. e.printStackTrace();
  14. }
  15. System.exit(0);
  16. }
  17. public static void initClient() {
  18. // 未设置httpConfig时,默认http连接均为30s
  19. HttpConfig httpConfig = new HttpConfig(30, 30, 30);
  20. appClient = new AppClient(url, appKey, appSecret, isTransferEncrypt, httpConfig);
  21. System.out.println("testInitClient:" + JacksonUtil.objToString(appClient));
  22. }
  23. public static void appRegister() throws Exception {
  24. try {
  25. ReqAppRegister req = new ReqAppRegister();
  26. req.setAppIp("127.0.0.1");
  27. req.setAppPort(5001);
  28. req.setAppLink("https://127.0.0.1:5001/");
  29. appClient.appRegister(req);
  30. System.out.println("appRegister end.");
  31. } catch (Exception e) {
  32. e.printStackTrace();
  33. }
  34. }
  35. }

签名

使用SDK时,SDK会自动填充。

签名说明

第三方应用从WeBASE管理平台获取注册信息WeBASE的IP和端口、为应用分配的appKey(应用Key)和appSecret(应用密码,应用自己保存,不要暴露),向WeBASE发送请求时,需要使用应用分配的appSecret对请求进行签名。WeBASE收到请求后,根据appKey查询应用对应的appSecret,使用相同规则对请求进行签名验证。只有在验证通过后,WeBASE才会对请求进行相应的处理。

  • 每个URL请求需带以下三个参数:
参数名类型描述参数值备注
timestamplong请求的时间戳(毫秒)1614928857832当前时间戳,有效期默认5分钟
appKeyString应用Keyfdsf78aW从WeBASE管理平台获取
signatureString签名串15B8F38…从WeBASE管理平台获取appSecret对appKey做的签名

签名规则

使用MD5对timestampappKey加密并转大写得到签名值signature

  1. public static String md5Encrypt(long timestamp, String appKey, String appSecret) {
  2. try {
  3. String dataStr = timestamp + appKey + appSecret;
  4. MessageDigest m = MessageDigest.getInstance("MD5");
  5. m.update(dataStr.getBytes("UTF8"));
  6. byte s[] = m.digest();
  7. String result = "";
  8. for (int i = 0; i < s.length; i++) {
  9. result += Integer.toHexString((0x000000FF & s[i]) | 0xFFFFFF00).substring(6);
  10. }
  11. return result.toUpperCase();
  12. } catch (Exception e) {
  13. e.printStackTrace();
  14. }
  15. return "";
  16. }

示例

  • 参数值:
参数参数值
timestamp1614928857832
appKeyfdsf78aW
appSecretoMdarsqFOsSKThhvXagTpNdoOcIJxUwQ
  • 签名后的 signature
  1. EEFD7CD030E6B311AA85B053A90E8A31