java sdk 2.x 生成的预签名url域名替换为cloudfront域名报错

0

使用java sdk 2.x生成的预签名url在浏览器可以正常访问,但是其中的域名更换为cloudfront的域名后浏览器访问提示

<Code>SignatureDoesNotMatch</Code>
<Message>
    The request signature we calculated does not match the signature you provided. Check your key and signing method.
</Message>

生成的域名是这样的 https://bucketname.s3.amazonaws.com 改成 https://bucketname.s3.us-east-1.amazonaws.com 还是提示同样的错误; 代码如下:

public static String getS3ObjectUrl(String keyName,String objectName) throws UnsupportedEncodingException {
		AwsCredentials awsCredentials =AwsBasicCredentials.create(s3AccessKeyId, s3SecretAccessKey);
		AwsCredentialsProvider credentialsProvider=StaticCredentialsProvider.create(awsCredentials );
		Region region = Region.US_EAST_1;
        S3Presigner presigner = S3Presigner.builder()
                .region(region)
                 .credentialsProvider(credentialsProvider)
                .build();
		String urlString= getPresignedUrl(presigner,s3Bucket,keyName,objectName);
		presigner.close();
		return urlString;
	}
	
	//获取s3 对象预签名路径
	public static String getPresignedUrl(S3Presigner presigner, String bucketName, String keyName,String objectName) throws UnsupportedEncodingException {
        try {
            GetObjectRequest getObjectRequest = GetObjectRequest.builder()
            		.responseContentDisposition("attachment; filename=\""+URLEncoder.encode(objectName, "UTF-8")+"\"") //设置更改后的文件名
                    .bucket(bucketName)
                    .key(getS3KeyName(keyName))
                    .build();

            GetObjectPresignRequest getObjectPresignRequest = GetObjectPresignRequest.builder()
                    .signatureDuration(Duration.ofMinutes(100))
                    .getObjectRequest(getObjectRequest)
                    .build();

            PresignedGetObjectRequest presignedGetObjectRequest = presigner.presignGetObject(getObjectPresignRequest);
            String theUrl = presignedGetObjectRequest.url().toString();
            System.out.println("Presigned URL: " + theUrl);
            return theUrl;

        } catch (S3Exception e) {
            e.getStackTrace();
        }
        return "";
    }

请帮忙看看是什么原因,谢谢!!!

wcl
已提问 1 个月前433 查看次数