Skip to content

SDK 配置说明

本文档详细说明一单位一平台 SDK 的所有配置选项。

配置文件

SDK 使用 Spring Boot 配置机制,在 application.ymlapplication.properties 中配置。

基础配置

必填配置

yaml
hztech:
  platform:
    sdk:
      # 应用 ID(必填)
      app-id: SUB_APP_001

      # 网关地址(必填)
      gateway-url: https://platform.example.com

      # 应用私钥(必填)
      private-key: ${HZTECH_PRIVATE_KEY}

      # 平台公钥(必填)
      platform-public-key: ${HZTECH_PLATFORM_PUBLIC_KEY}
配置项类型必填说明
app-idString子应用 ID,由平台分配
gateway-urlString平台网关地址
private-keyString应用私钥(PEM 格式)
platform-public-keyString平台公钥(PEM 格式)

超时配置

yaml
hztech:
  platform:
    sdk:
      # 连接超时(毫秒)
      connect-timeout: 10000    # 10秒

      # 读取超时(毫秒)
      read-timeout: 30000       # 30秒

      # 写入超时(毫秒)
      write-timeout: 30000      # 30秒
配置项类型默认值说明
connect-timeoutInteger10000建立 TCP 连接的超时时间
read-timeoutInteger30000读取响应数据的超时时间
write-timeoutInteger30000发送请求数据的超时时间

日志配置

yaml
hztech:
  platform:
    sdk:
      # 是否启用日志
      enable-log: true

      # 日志级别
      log-level: INFO
配置项类型默认值可选值说明
enable-logBooleantruetrue/false是否启用请求/响应日志
log-levelStringINFODEBUG/INFO/WARN/ERROR日志级别

日志配置示例

yaml
# 在 application.yml 中设置 SDK 日志级别
logging:
  level:
    cn.hztech.sdk: DEBUG

# 生产环境建议使用 INFO 级别
logging:
  level:
    cn.hztech.sdk: INFO

重试配置

yaml
hztech:
  platform:
    sdk:
      # 是否启用重试
      enable-retry: true

      # 最大重试次数
      max-retries: 3

      # 重试间隔(毫秒)
      retry-interval: 1000
配置项类型默认值说明
enable-retryBooleantrue是否启用自动重试
max-retriesInteger3失败后的最大重试次数
retry-intervalInteger1000重试间隔时间(毫秒)

重试策略

SDK 会在以下情况自动重试:

  • 网络连接失败
  • 读取超时
  • 5xx 服务器错误

重试次数达到上限后,SDK 会抛出 ApiException

时间戳容差配置

yaml
hztech:
  platform:
    sdk:
      # 时间戳容差(毫秒)
      timestamp-tolerance: 60000  # ±60秒
配置项类型默认值说明
timestamp-toleranceInteger60000时间戳验证的容差范围

时间同步要求

  • 客户端与服务器的时间差必须在容差范围内
  • 建议使用 NTP 服务同步时间
  • 容差设置过大会降低安全性

完整配置示例

yaml
hztech:
  platform:
    sdk:
      # ===== 基础配置 =====
      app-id: SUB_APP_001
      gateway-url: https://platform.example.com
      private-key: ${HZTECH_PRIVATE_KEY}
      platform-public-key: ${HZTECH_PLATFORM_PUBLIC_KEY}

      # ===== 超时配置 =====
      connect-timeout: 10000
      read-timeout: 30000
      write-timeout: 30000

      # ===== 日志配置 =====
      enable-log: true
      log-level: INFO

      # ===== 重试配置 =====
      enable-retry: true
      max-retries: 3
      retry-interval: 1000

      # ===== 时间戳容差 =====
      timestamp-tolerance: 60000

环境变量配置

为了安全起见,建议使用环境变量存储密钥:

Linux/Mac

bash
# 在 ~/.bashrc 或 ~/.zshrc 中添加
export HZTECH_PRIVATE_KEY="MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC..."
export HZTECH_PLATFORM_PUBLIC_KEY="MFkwEQYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE5s8aJ5LX8QY4ZJ5K8M5ZJL8qN3s..."

Windows

cmd
# 在系统环境变量中设置
HZTECH_PRIVATE_KEY=MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC...
HZTECH_PLATFORM_PUBLIC_KEY=MFkwEQYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE5s8aJ5LX8QY4ZJ5K8M5ZJL8qN3s...

Docker

yaml
version: '3.8'
services:
  app:
    image: your-app:latest
    environment:
      - HZTECH_PRIVATE_KEY=MIIEvQIBADANBgkqhkiG9w0B...
      - HZTECH_PLATFORM_PUBLIC_KEY=MFkwEQYHKoZIzj0CAQYIK...

Kubernetes

yaml
apiVersion: v1
kind: Secret
metadata:
  name: hztech-sdk-secrets
type: Opaque
data:
  private-key: MIIEvQIBADANBgkqhkiG9w0B...
  platform-public-key: MFkwEQYHKoZIzj0CAQYIK...
---
apiVersion: v1
kind: Deployment
metadata:
  name: your-app
spec:
  template:
    spec:
      containers:
        - name: app
          env:
            - name: HZTECH_PRIVATE_KEY
              valueFrom:
                secretKeyRef:
                  name: hztech-sdk-secrets
                  key: private-key
            - name: HZTECH_PLATFORM_PUBLIC_KEY
              valueFrom:
                secretKeyRef:
                  name: hztech-sdk-secrets
                  key: platform-public-key

配置属性类

SDK 使用 SdkProperties 类来管理配置:

java
@ConfigurationProperties(prefix = "hztech.platform.sdk")
public class SdkProperties {

    /**
     * 应用 ID
     */
    private String appId;

    /**
     * 网关地址
     */
    private String gatewayUrl;

    /**
     * 应用私钥
     */
    private String privateKey;

    /**
     * 平台公钥
     */
    private String platformPublicKey;

    /**
     * 连接超时
     */
    private Integer connectTimeout = 10000;

    /**
     * 读取超时
     */
    private Integer readTimeout = 30000;

    /**
     * 写入超时
     */
    private Integer writeTimeout = 30000;

    /**
     * 是否启用日志
     */
    private Boolean enableLog = true;

    /**
     * 日志级别
     */
    private String logLevel = "INFO";

    /**
     * 是否启用重试
     */
    private Boolean enableRetry = true;

    /**
     * 最大重试次数
     */
    private Integer maxRetries = 3;

    /**
     * 重试间隔
     */
    private Integer retryInterval = 1000;

    /**
     * 时间戳容差
     */
    private Integer timestampTolerance = 60000;

    // Getters and Setters
}

安全注意事项

密钥管理

  • 不要将密钥硬编码在代码中
  • 不要将密钥提交到 Git 仓库
  • 不要在日志中打印密钥
  • 使用环境变量或密钥管理服务(KMS)
  • 设置适当的文件权限(600)

生产环境建议

yaml
# 生产环境配置示例
hztech:
  platform:
    sdk:
      # 使用环境变量
      app-id: ${HZTECH_APP_ID}
      gateway-url: ${HZTECH_GATEWAY_URL}
      private-key: ${HZTECH_PRIVATE_KEY}
      platform-public-key: ${HZTECH_PLATFORM_PUBLIC_KEY}

      # 日志级别使用 INFO 或 WARN
      enable-log: true
      log-level: INFO

      # 根据实际情况调整超时时间
      connect-timeout: 10000
      read-timeout: 30000
      write-timeout: 30000

配置验证

SDK 启动时会自动验证配置,如果配置不正确会抛出异常:

java
@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        try {
            SpringApplication.run(Application.class, args);
            log.info("SDK 初始化成功");
        } catch (Exception e) {
            log.error("SDK 初始化失败: {}", e.getMessage());
            System.exit(1);
        }
    }
}

常见配置问题

问题1:密钥格式错误

错误信息Invalid key format

解决方案:确保密钥是 PEM 格式,包含完整的头尾标记:

-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC...
-----END PRIVATE KEY-----

问题2:时间戳验证失败

错误信息Timestamp validation failed

解决方案

  1. 检查系统时间是否同步
  2. 增加 timestamp-tolerance 配置值
  3. 使用 NTP 服务同步时间

问题3:连接超时

错误信息Connect timeout

解决方案

  1. 检查网络连接
  2. 增加 connect-timeout 配置值
  3. 检查防火墙设置

下一步

最近更新