java - Java中PresignedURL的SignatureDoesNotMatch
问题描述
public S3PresignedURLServiceImpl() {
amazonS3Client = AmazonS3ClientBuilder
.standard()
.withCredentials(new DefaultAWSCredentialsProviderChain())
.withRegion(S3PresignedURLConstants.DEFAULT_REGION)
.build();
}
[在本地它正在工作,但是当 lambda 部署在控制台上时
SignatureDoesNotMatch 我们计算的请求签名与您提供的签名不匹配。检查您的密钥和签名方法。
try {
// Set the pre-signed URL to expire after specified time.
java.util.Date expiration = new java.util.Date();
long expTimeMillis = expiration.getTime();
if(data.getExpiryTime() > 0) {
expTimeMillis += 1000 * 60 * data.getExpiryTime();
} else {
expTimeMillis += 100 * 60 * 60 * 6;
}
expiration.setTime(expTimeMillis);
HttpMethod httpMethod = data.isUpload()?HttpMethod.PUT:HttpMethod.GET;
Logger.logInfo("Generating pre-signed URL.",REPORTER);
GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(data.getBucketName(), data.getFilePath())
.withMethod(httpMethod)
.withExpiration(expiration);
if(!data.isUpload())
generatePresignedUrlRequest.withVersionId(data.getVersionId());
else generatePresignedUrlRequest.withContentType(data.getContentType());
url = amazonS3Client.generatePresignedUrl(generatePresignedUrlRequest);
responseData.setPreSignedUrl(url.toString());
}
catch(Exception e) {
throw new S3PresignedURLException(e.getMessage(), e);
}
解决方案
请检查 library 的版本org.apache.httpcomponents:httpclient
,如果是4.5.7
或4.5.8
,请尝试降级到4.5.6
,因为 AWS SDK S3 存在问题。有关更多详细信息,请查看Amazon S3 签名不匹配 - AWS 开发工具包 Java和org.apache.httpcomponents:httpclient:4.5.7 中断获取 S3 对象。
推荐阅读
- java - PropertySource 在 DispatcherServletInitializer 中不起作用
- c# - ''Microsoft.ACE.OLEDB.12.0' 提供程序未在本地计算机上注册。'
- javascript - 如何添加同步回调以存储在 ExtJS 中
- c# - 线程内核对象是否依赖于 CPU
- buildroot - Buildroot 2020.02 为什么我不能添加 resize2fs 二进制文件?
- reactjs - 类型“”不可分配给类型“IntrinsicAttributes &”。类型“IntrinsicAttributes &”上不存在属性“”
- android - 从 React Native App 中的 WebView 打开动态链接
- binary - 为什么使用 Meson / Ninja 生成的二进制文件比普通 valac 编译的要大得多?
- oracle - 关于 nvarchar2 工作问题的 Oracle 12 等于和不等于 (=, !=, <>) 行为
- python - Python 3.7 上的 Flask 比具有 Google App Engine 标准环境的 Python 2.7 上的 webapp2 要求更高(也更昂贵)