You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Java SDK V2如何覆盖签名者?迁移V1代码遇类型适配问题

AWS SDK 1.x 转 2.x:签名器字符串转Signer对象实现签名器覆盖

方案一:映射内置签名器字符串到对应Signer实例

AWS SDK 2.x不再支持直接通过字符串设置签名器,你需要将原1.x的签名器字符串映射为对应的Signer实现类实例。常见映射关系及实现代码如下:

import software.amazon.awssdk.auth.signer.Aws4Signer;
import software.amazon.awssdk.services.s3.signer.S3Signer;
import software.amazon.awssdk.services.s3.signer.S3V4Signer;
import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration;
import software.amazon.awssdk.core.client.config.SdkAdvancedClientOption;
import software.amazon.awssdk.core.signer.Signer;

// 根据原字符串签名器类型实例化对应Signer对象
Signer signer;
String signerType = s3StorageConnection.getSignerType();
switch (signerType) {
    case "S3SignerType":
        signer = S3Signer.create();
        break;
    case "AWSS3V4Signer":
        signer = S3V4Signer.create();
        break;
    case "AWS4Signer":
        signer = Aws4Signer.create();
        break;
    // 其他内置签名器可按需添加
    default:
        throw new IllegalArgumentException("不支持的签名器类型: " + signerType);
}

// 配置客户端覆盖参数
ClientOverrideConfiguration overrideConfig = ClientOverrideConfiguration.builder()
        .putAdvancedOption(SdkAdvancedClientOption.SIGNER, signer)
        .build();

// 构建S3客户端
S3Client s3Client = S3Client.builder()
        .overrideConfiguration(overrideConfig)
        // 添加其他必要配置(如区域、凭据等)
        .build();

方案二:自定义签名器(若使用非内置签名器)

如果你的signerType对应自定义签名逻辑,需要实现SDK 2.x的Signer接口,再实例化传入:

import software.amazon.awssdk.core.signer.Signer;
import software.amazon.awssdk.core.signer.SignerExecutionAttribute;
import software.amazon.awssdk.http.SdkHttpFullRequest;

public class CustomSigner implements Signer {
    @Override
    public SdkHttpFullRequest sign(SdkHttpFullRequest request, SignerExecutionAttribute executionAttributes) {
        // 实现你的自定义签名逻辑
        return request;
    }
}

// 实例化自定义签名器
Signer signer = new CustomSigner();

// 后续客户端配置同方案一

注意事项

  • 不同服务的签名器类位置不同:S3专属签名器在software.amazon.awssdk.services.s3.signer包下,通用AWS签名器在software.amazon.awssdk.auth.signer包下。
  • 若不确定原字符串对应2.x的哪个签名器,可对照原1.x签名器类的功能描述,匹配2.x的对应实现类。

内容的提问来源于stack exchange,提问作者Isvoran Andrei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 13:26:15