是否有办法使GeneratePresignedUrlRequest的过期时间正常工作



我一直试图在向AWS发送请求后设置过期时间,以便创建预签名URL;然而,我没有得到预先签署的URL过期的时间,我需要。

以下是我从AWS使用的一些代码:

java.util.Date expiration = new java.util.Date();
long expTimeMillis = Instant.now().toEpochMilli();
expTimeMillis += 1000;
System.out.println("expired Time:"+expTimeMillis);
expiration.setTime(expTimeMillis);
GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(bucketName, key)
.withMethod(HttpMethod.GET).withExpiration(expiration);
URL url = s3Client.generatePresignedUrl(generatePresignedUrlRequest);

在向AWS发送请求后,我得到了这个预先签名的URL:

https://BucketName.amazonaws.com/ABC/DEF/ABC.csv
?response-content-disposition=attachment%3B%20filename%20ABC.csv%22
&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20221005T024318Z&X-Amz-SignedHeaders=host
&X-Amz-Expires=0&X-Amz-Credential=AASDus-east-1%2Fs3%2Faws4_request
&X-Amz-Signature=HHHHH

我能够下载该文件,并能够在5分钟后使用预先签名的URL。然而,大约10分钟后,我收到了这条信息。如果我没有错过任何东西,我希望在1秒后而不是10分钟后收到这条消息。

<Error>
<Code>AccessDenied</Code>
<Message>Request has expired</Message>
<X-Amz-Expires>0</X-Amz-Expires>
<Expires>2022-10-05T02:43:18Z</Expires>
<ServerTime>2022-10-05T02:45:01Z</ServerTime>
<RequestId>RequestID</RequestId>
<HostId>Host</HostId>
</Error>

这可能是由于计算机上的时钟漂移——请检查它是否是从时间服务器自动设置的。

有时,人们使用错误的时区创建预先签名的URL(AWS使用UTC(,因此请确认URL中使用的时间是UTC。

最新更新