2026-08-18 00:35:59 +08:00
|
|
|
|
/*
|
|
|
|
|
|
* Copyright (c) 2025 SimcuTeam. All rights reserved.
|
2026-08-25 13:43:26 +08:00
|
|
|
|
* 遵循 MIT 许可证。
|
|
|
|
|
|
* 声明式签名校验注解。
|
2026-08-18 00:35:59 +08:00
|
|
|
|
*
|
|
|
|
|
|
* 标注在控制器方法或类上,请求派发时(SimApiRequestDelegateFactory)自动执行验签:
|
|
|
|
|
|
* - 提取 appId / timestamp / nonce / sign(Query 优先,其次 Header)
|
|
|
|
|
|
* - 通过 keyProvider(DI 解析)获取密钥
|
|
|
|
|
|
* - 过期校验 + nonce 去重(需缓存)
|
|
|
|
|
|
* - 拼接 SignFields + appId + timestamp + nonce + key,MD5 比对
|
|
|
|
|
|
*
|
|
|
|
|
|
* 用法:
|
|
|
|
|
|
* @SimApiSign // 默认 SimApiSignProviderBase(应用需注册实现)
|
|
|
|
|
|
* @SimApiSign["MySignProvider"] // 指定 provider 类型名(DI 注册的实现类)
|
|
|
|
|
|
*
|
|
|
|
|
|
* 说明:仓颉注解参数须为编译期常量,无法直接持有 Type;
|
|
|
|
|
|
* 故 keyProvider 用类型名 String,运行时经 TypeInfo.get 解析后从 DI 取实例。
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
2026-08-18 04:23:07 +08:00
|
|
|
|
package simcu::simapi.annotations
|
2026-08-18 00:35:59 +08:00
|
|
|
|
|
|
|
|
|
|
@Annotation[target: [MemberFunction, Type]]
|
|
|
|
|
|
public class SimApiSign {
|
|
|
|
|
|
/// 签名提供器类型名(DI 注册的 SimApiSignProviderBase 实现类名)
|
|
|
|
|
|
public let keyProvider: String
|
|
|
|
|
|
|
|
|
|
|
|
public const init() {
|
|
|
|
|
|
this.keyProvider = ""
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public const init(keyProvider: String) {
|
|
|
|
|
|
this.keyProvider = keyProvider
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|