AWS的Java SDK - AWS认证需要一个有效的日期或X-AMZ-日期标题日期、有效、标题、Java

2023-09-11 08:21:09 作者:拼命的把回忆堆进抽屉里面

使用AWS SDK的Java和Java时,遇到以下情况例外1.8u60 +。

  com.amazonaws.services.s3.model.AmazonS3Exception:AWS身份验证需要一个有效的日期或X-AMZ-Date头(服务:亚马逊S3;状态code:403 ;错误code:AccessDenied;请求ID:41C359C079CBAFCF)
    在com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1182)〜[AWS-java的SDK-核心1.10.10.jar:NA]
    在com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:770)〜[AWS-java的SDK-核心1.10.10.jar:NA]
    在com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:489)〜[AWS-java的SDK-核心1.10.10.jar:NA]
    在com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:310)〜[AWS-java的SDK-核心1.10.10.jar:NA]
    在com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3608)〜[AWS-java的SDK-s3-1.10.10.jar:NA]
    在com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3561)〜[AWS-java的SDK-s3-1.10.10.jar:NA]
    在com.amazonaws.services.s3.AmazonS3Client.listObjects(AmazonS3Client.java:647)〜[AWS-java的SDK-s3-1.10.10.jar:NA]
    在com.amazonaws.services.s3.AmazonS3Client.listObjects(AmazonS3Client.java:632)〜[AWS-java的SDK-s3-1.10.10.jar:NA]
 

解决方案

这是由JodaTime和Java版本大于1.8u60之间的错误。升级到JodaTime版本2.8.1或更高版本解决了这个问题。请参阅以下Github上的问题,以供参考。

https://github.com/aws/aws-sdk-java/issues/484 https://github.com/aws/aws-sdk-java/issues/444

一名资深大牛10年时间总结出的一些有关于Java软件开发的经验

Getting the following exception when using the AWS SDK for Java and Java 1.8u60+.

com.amazonaws.services.s3.model.AmazonS3Exception: AWS authentication requires a valid Date or x-amz-date header (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: 41C359C079CBAFCF)
    at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1182) ~[aws-java-sdk-core-1.10.10.jar:na]
    at com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:770) ~[aws-java-sdk-core-1.10.10.jar:na]
    at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:489) ~[aws-java-sdk-core-1.10.10.jar:na]
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:310) ~[aws-java-sdk-core-1.10.10.jar:na]
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3608) ~[aws-java-sdk-s3-1.10.10.jar:na]
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3561) ~[aws-java-sdk-s3-1.10.10.jar:na]
    at com.amazonaws.services.s3.AmazonS3Client.listObjects(AmazonS3Client.java:647) ~[aws-java-sdk-s3-1.10.10.jar:na]
    at com.amazonaws.services.s3.AmazonS3Client.listObjects(AmazonS3Client.java:632) ~[aws-java-sdk-s3-1.10.10.jar:na]

解决方案

This is caused by a bug between JodaTime and versions of Java greater then 1.8u60. Upgrading to JodaTime version 2.8.1 or later solves the issue. See the following Github issues for reference.

https://github.com/aws/aws-sdk-java/issues/484 https://github.com/aws/aws-sdk-java/issues/444