CloudFront签名URL

目的

使用CloudFront签名URL机制来实现,下载文件安全。

前提

已经为CloudFront设置好密钥组,并且启用CloudFront签名URL机制来下载s3文件选项。

Maven

...
    <aws.java.sdk1.version>1.12.31</aws.java.sdk1.version>
...
    <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-java-sdk-cloudfront</artifactId>
      <version>${aws.java.sdk1.version}</version>
    </dependency>
...

Java

这里使用AWS for Java SDK V1的版本,V2的版本我翻了半天文档都没有找到到CloudFront怎么签名URL的,只有V1版本的Java示例代码。

package util;

import com.amazonaws.services.cloudfront.CloudFrontUrlSigner;
import com.amazonaws.services.cloudfront.util.SignerUtils;
import lombok.extern.slf4j.Slf4j;

import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.security.spec.InvalidKeySpecException;
import java.util.Date;

@Slf4j
public class AWSCloudFrontUtil {
    /**
     * 签名URL
     *
     * @param distributionDomain 域名
     * @param privateKeyFile     私钥文件
     * @param s3ObjectKey        s3key
     * @param keyPairId          密钥id
     * @param dateLessThan       小于日期
     * @param dateGreaterThan    大于日期
     * @return 签名url
     */
    public static String signUrl(String distributionDomain, File privateKeyFile, String s3ObjectKey, String keyPairId, Date dateLessThan, Date dateGreaterThan) {
        SignerUtils.Protocol protocol = SignerUtils.Protocol.https;
        // 中文URL处理,在s3中空格需要替换成+
         s3ObjectKey = s3ObjectKey.replace(" ", "+");
         s3ObjectKey = UriUtils.encodePath(s3ObjectKey, StandardCharsets.UTF_8);

        String ipRange = "0.0.0.0/0";

        try {
            return CloudFrontUrlSigner.getSignedURLWithCustomPolicy(
                    protocol, distributionDomain, privateKeyFile,
                    s3ObjectKey, keyPairId, dateLessThan,
                    dateGreaterThan, ipRange);
        } catch (InvalidKeySpecException | IOException e) {
            log.error("签名url异常:", e);
        }
        return "";
    }
}

架构图

s3+cloudfront singer url

参考:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值