文档首页/ 密码安全中心 DEW/ 常见问题/ 密钥管理/ 如何使用union-sdk增强代码的灵活度和兼容性?
更新时间:2026-01-08 GMT+08:00
分享

如何使用union-sdk增强代码的灵活度和兼容性?

使用union-sdk增强代码的灵活度和兼容性,可参照如下操作。更多sdk使用指导,请参考SDK概述

// 1.准备访问华为云的认证信息
// 推荐手工传入项目ID。此处不传项目ID,SDK会请求IAM动态获取项目ID,既增加网络时延,又可能因为访问IAM不通导致此处抛出异常。
final BasicCredentials auth = new BasicCredentials()
        .withIamEndpoint(IAM_ENDPOINT).withAk(ACCESS_KEY).withSk(SECRET_ACCESS_KEY).withProjectId(PROJECT_ID);
// 推荐配置httpConfig。对于未提供权威CA机构签发证书的场景,此处设置能忽略校验。
// httpConfig支持注册监听器,可用于打印响应的requestId,发生异常时,可提供请求ID用于后端检索日志。
HttpConfig httpConfig = new HttpConfig().withIgnoreSSLVerification(true);
HttpListener responseListener = HttpListener.forResponseListener(listener -> {
    if (listener.statusCode() >= 400) {
        System.out.println("X-Request-ID: " +
            listener.headers().entrySet().stream()
                .filter(entry -> entry.getKey().equalsIgnoreCase("X-Request-ID"))
                .map(entry -> entry.getValue().get(0)).collect(Collectors.joining("")));
    }
});
httpConfig.addHttpListener(responseListener);
// 2.初始化SDK,传入认证信息及KMS访问终端地址
// 推荐手动配置Region ID和对应的KMS地址。如果通过枚举传入,例如KmsRegion.CN_NORTH_4,依赖后端更新SDK,不够灵活。
// 推荐此处仅初始化一次客户端,后续反复使用此对象即可。
final KmsClient kmsClient = KmsClient.newBuilder()
        .withRegion(new Region(KMS_REGION_ID, KMS_ENDPOINT)).withHttpConfig(httpConfig).withCredential(auth).build();
// 3.组装创建数据密钥请求信息
final CreateDatakeyRequest createDatakeyRequest = new CreateDatakeyRequest()
                .withBody(new CreateDatakeyRequestBody().withKeyId(keyId).withDatakeyLength(AES_KEY_BIT_LENGTH));
// 4.创建数据密钥
// 推荐进行重试,响应码为429或者大于500时重试3~5次。
final CreateDatakeyResponse createDatakeyResponse = kmsClient.createDatakeyInvoker(createDatakeyRequest)
            .retryTimes(3).retryCondition((resp, ex) -> Objects.nonNull(ex) && ServiceResponseException.class.isAssignableFrom(ex.getClass())
                && (((ServiceResponseException) ex).getHttpStatusCode() == 429
                || ((ServiceResponseException) ex).getHttpStatusCode() >= 500)).invoke();

相关文档