From b664c0c1a20797e016e9e3c602ba0ab19aac59e9 Mon Sep 17 00:00:00 2001 From: quyixiao <2621048238@qq.com> Date: Wed, 8 Oct 2025 13:46:21 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/heyu/api/alibaba/AliyunCDNAuthA.java | 80 +++++++++++++++++++ .../controller/vv/AppOssAuthController.java | 29 +++++++ 2 files changed, 109 insertions(+) create mode 100644 api-third/src/main/java/com/heyu/api/alibaba/AliyunCDNAuthA.java create mode 100644 api-web/api-interface/src/main/java/com/heyu/api/controller/vv/AppOssAuthController.java diff --git a/api-third/src/main/java/com/heyu/api/alibaba/AliyunCDNAuthA.java b/api-third/src/main/java/com/heyu/api/alibaba/AliyunCDNAuthA.java new file mode 100644 index 0000000..3ecdae9 --- /dev/null +++ b/api-third/src/main/java/com/heyu/api/alibaba/AliyunCDNAuthA.java @@ -0,0 +1,80 @@ +package com.heyu.api.alibaba; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.UUID; + +public class AliyunCDNAuthA { + + + /** + * 生成阿里云CDN鉴权方式A的加密URL + * + * @param filePath 文件路径,以/开头,如 "/video/test.mp4" + * @param expiresInSeconds 过期时间(从当前算起的秒数) + * @return 完整的加密URL + */ + public static String generateAuthUrl(String privateKey,String domainName,String filePath, long expiresInSeconds) { + try { + // 1. 生成时间戳(当前时间 + 过期时间) + long timestamp = (System.currentTimeMillis() / 1000) + expiresInSeconds; + + // 2. 生成随机数(去掉UUID中的短横线) + String rand = UUID.randomUUID().toString().replace("-", ""); + + // 3. 设置uid为0 + String uid = "0"; + + // 4. 计算md5hash + String md5hash = calculateMd5Hash(privateKey,filePath, timestamp, rand, uid); + + // 5. 构建鉴权URL + return "http://" + domainName + filePath + + "?auth_key=" + timestamp + "-" + rand + "-" + uid + "-" + md5hash; + + } catch (Exception e) { + throw new RuntimeException("生成鉴权URL失败", e); + } + } + + /** + * 计算MD5哈希值 + */ + private static String calculateMd5Hash(String privateKey,String filePath, long timestamp, String rand, String uid) + throws NoSuchAlgorithmException { + // 构造签名字符串 + String signString = filePath + "-" + timestamp + "-" + rand + "-" + uid + "-" + privateKey; + + // 计算MD5 + MessageDigest md = MessageDigest.getInstance("MD5"); + byte[] digest = md.digest(signString.getBytes()); + + // 转换为十六进制字符串 + StringBuilder hexString = new StringBuilder(); + for (byte b : digest) { + String hex = Integer.toHexString(0xff & b); + if (hex.length() == 1) { + hexString.append('0'); + } + hexString.append(hex); + } + + return hexString.toString(); + } + + /** + * 使用示例 + */ + public static void main(String[] args) { + // 初始化鉴权对象 + String privateKey = "heyuquyixiao123456"; // 替换为你的密钥 + String domainName = "heyuimage.ihzhy.com"; // 替换为你的CDN域名 + + + // 生成鉴权URL,有效时间30分钟(1800秒) + String filePath = "/ccc.jpeg"; + String authUrl = AliyunCDNAuthA.generateAuthUrl(privateKey,domainName,filePath, 1800); + + System.out.println("生成的鉴权URL: " + authUrl); + } +} \ No newline at end of file diff --git a/api-web/api-interface/src/main/java/com/heyu/api/controller/vv/AppOssAuthController.java b/api-web/api-interface/src/main/java/com/heyu/api/controller/vv/AppOssAuthController.java new file mode 100644 index 0000000..97c9491 --- /dev/null +++ b/api-web/api-interface/src/main/java/com/heyu/api/controller/vv/AppOssAuthController.java @@ -0,0 +1,29 @@ +package com.heyu.api.controller.vv; + + +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +@Slf4j +@RestController +public class AppOssAuthController { + + + @RequestMapping("/auth") + public HttpServletResponse auth(HttpServletRequest request, HttpServletResponse response) { + + String uri = request.getRequestURI(); + + log.info("AppOssAuthController uri:{}",uri); + + response.setStatus(HttpServletResponse.SC_OK); + + return response; + } + + +}