feat(framework): 新增 @OssPresignUrl 注解与 ResponseBodyAdvice 自动预签名框架

基于 ResponseBodyAdvice 拦截 CommonResult 响应体,通过反射递归扫描
VO 中标注 @OssPresignUrl 的 String 字段,去重后批量调用
OssPresignUrlApi 一次性完成预签名,再回填到对应字段。

核心设计:
- supports() 阶段通过泛型静态分析判断 VO 是否含注解字段,
  无注解的接口零开销跳过(类似字典翻译注解思路)
- 三级缓存:FIELD_CACHE / ALL_FIELDS_CACHE / HAS_PRESIGN_CACHE
- 递归深度限制 MAX_SCAN_DEPTH=10 防止 StackOverflow
- 仅扫描 com.viewsh.* 包,规避 Java 17 模块系统限制
- 异常静默降级,保留原始 URL

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
lzh
2026-03-18 15:05:42 +08:00
parent f792ee1678
commit f3299bd655
4 changed files with 393 additions and 0 deletions

View File

@@ -0,0 +1,20 @@
package com.viewsh.framework.common.biz.infra.file;
import java.util.List;
/**
* OSS 预签名 URL 通用接口
* <p>
* 由 infra 模块提供实现,供 {@code OssPresignResponseBodyAdvice} 等框架组件使用
*/
public interface OssPresignUrlApi {
/**
* 批量生成文件预签名地址
*
* @param urls 原始 URL 列表
* @return 签名后的 URL 列表(与入参顺序一致)
*/
List<String> presignGetUrls(List<String> urls);
}