[英]AWS Java SDK - AWS authentication requires a valid Date or x-amz-date header
使用适用于 Java 和 Java 1.8u60+ 的 AWS 开发工具包时出现以下异常。
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]
这是由 JodaTime 和高于 1.8u60 的 Java 版本之间的错误引起的。 升级到 JodaTime 版本 2.8.1 或更高版本可解决此问题。 请参阅以下 Github 问题以供参考。
https://github.com/aws/aws-sdk-java/issues/484 https://github.com/aws/aws-sdk-java/issues/444
据我所知,这个问题有三种解决方案:
将您的 AWS Java 开发工具包更新到 1.10.1 或更高版本
我在使用 presto 时遇到了。 问题是java版本jdk1.8.0_60更大,降级到jdk1.8.0_45即可解决问题
我遇到了同样的问题。我现在已经解决了。唯一的问题是 java 1.8u60+ 不支持 aws sdk 1.10.10,所以你可以只更新 aws sdk 版本 1.11.52 ..我的意思是最新版本,它解决了它。
另外,当您升级版本时,请注意依赖关系树中的冲突。 就我而言,升级 aws sdk 版本后与 httpclient 发生冲突。
上面的所有答案都让我抓狂,因为他们建议更改库、客户端或其他一些重大更改。 我必须使用客户端 1.9.31,我无法控制哪个 joda 或 JVM。 所以这里是 java 修复程序,而无需执行上述所有操作!
在发送请求之前,如 PutObjectRequest,请执行以下操作:
putObjectRequest.putCustomRequestHeader("x-amz-date", getServerTime());
public static String getServerTime() {
SimpleDateFormat dateFormat = new SimpleDateFormat(
"EEE, dd MMM yyyy HH:mm:ss Z", Locale.US);
return dateFormat.format(Calendar.getInstance().getTime());
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.