Java 使用AWS4Signer对Get请求进行签名:我们计算的请求签名与您提供的签名不匹配

Java 使用AWS4Signer对Get请求进行签名:我们计算的请求签名与您提供的签名不匹配,java,amazon-web-services,amazon-s3,aws-sdk,aws-java-sdk,Java,Amazon Web Services,Amazon S3,Aws Sdk,Aws Java Sdk,上下文 我试图生成一个GET请求来获取存储在AWS S3存储桶中的文件。生成的链接将在一小时后过期 其他详细信息 API:用于Java的AmazonV2 SDK-开发者预览11 此错误通常也是由于访问键中有“+”而导致的,但我的所有键都没有 相关代码 @Override public CompletableFuture<String> getSignedUrl(String key) { Aws4PresignerParams params = Aws4Presign

上下文

我试图生成一个GET请求来获取存储在AWS S3存储桶中的文件。生成的链接将在一小时后过期

其他详细信息

  • API:用于Java的AmazonV2 SDK-开发者预览11
  • 此错误通常也是由于访问键中有“+”而导致的,但我的所有键都没有
相关代码

@Override
  public CompletableFuture<String> getSignedUrl(String key) {
    Aws4PresignerParams params = Aws4PresignerParams.builder()
        .awsCredentials(this.credentials)
        .signingName("s3")
        .signingRegion(Region.AP_SOUTH_1)
        .expirationTime(Instant.ofEpochSecond(60*60))
        .build();
    SdkHttpFullRequest request = SdkHttpFullRequest.builder()
        .host("s3.ap-south-1.amazonaws.com")
        .encodedPath("<bucket name>/" + key)
        .method(SdkHttpMethod.GET)
        .protocol("https")
        .build();
    SdkHttpFullRequest result = Aws4Signer.create().presign(request,params);
    return CompletableFuture.completedFuture(result.getUri().toString());
  }

新API为Amazon S3服务使用了不同的签名者类:AwsS3V4Signer

 @Override
  public CompletableFuture<String> getSignedUrl(String key) {
    System.out.println(this.credentials);
    Aws4PresignerParams params = Aws4PresignerParams.builder()
        .expirationTime(Instant.ofEpochSecond(60*60))
        .awsCredentials(this.credentials)
        .signingName("s3")
        .signingRegion(Region.AP_SOUTH_1)
        .build();
    SdkHttpFullRequest request = SdkHttpFullRequest.builder()
        .encodedPath(("/stgpocketpillsimages/" + key))
        .host("s3.ap-south-1.amazonaws.com")
        .method(SdkHttpMethod.GET)
        .protocol("https")
        .build();
    SdkHttpFullRequest result = AwsS3V4Signer.create().presign(request,params);
    System.out.println(Json.toJson(result));
    return CompletableFuture.completedFuture(result.getUri().toString());
  }
@覆盖
公共CompletableFuture getSignedUrl(字符串键){
System.out.println(this.credentials);
Aws4PresignerParams params=Aws4PresignerParams.builder()
.到期时间(瞬间每秒(60*60))
.awsCredentials(此.credentials)
.签名姓名(“s3”)
.签约地区(亚太地区南部地区1)
.build();
SdkHttpFullRequest request=SdkHttpFullRequest.builder()
.encodedPath((“/stgpocketpillsimages/”+键))
.host(“s3.ap-south-1.amazonaws.com”)
.method(SdkHttpMethod.GET)
.协议(“https”)
.build();
SdkHttpFullRequest结果=AwsS3V4Signer.create().presign(请求,参数);
System.out.println(Json.toJson(result));
返回CompletableFuture.completedFuture(result.getUri().toString());
}
 @Override
  public CompletableFuture<String> getSignedUrl(String key) {
    System.out.println(this.credentials);
    Aws4PresignerParams params = Aws4PresignerParams.builder()
        .expirationTime(Instant.ofEpochSecond(60*60))
        .awsCredentials(this.credentials)
        .signingName("s3")
        .signingRegion(Region.AP_SOUTH_1)
        .build();
    SdkHttpFullRequest request = SdkHttpFullRequest.builder()
        .encodedPath(("/stgpocketpillsimages/" + key))
        .host("s3.ap-south-1.amazonaws.com")
        .method(SdkHttpMethod.GET)
        .protocol("https")
        .build();
    SdkHttpFullRequest result = AwsS3V4Signer.create().presign(request,params);
    System.out.println(Json.toJson(result));
    return CompletableFuture.completedFuture(result.getUri().toString());
  }