使用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
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