mjava/src/main/java/com/malk/utils/UtilSignature.java:HMAC-SHA256 静态方法 sign(secret, method, path, body, timestamp, nonce) → hexmjava/src/main/java/com/malk/core/NonceCache.java:封装 UtilToken.TimedCache,API 为 putIfAbsent(nonce) → booleanUtilSignatureTest 覆盖不同 method / 空 body / 中文 pathNonceCacheTest 覆盖 TTL 过期 / LRU 淘汰 / 并发com.malk.config.AuthConfigProperties(@ConfigurationProperties(prefix = "mjava.auth"))com.malk.config.AuthConfig(@Configuration,根据 enabled 与 secret 条件装配)com.malk.filter.NoAuth(@Target({METHOD, TYPE}) @Retention(RUNTIME))application.yml 补默认值 mjava.auth.enabled: falseapplication-*.yml.example 示例 mjava.auth.* 占位com.malk.filter.AuthFilter:Header 齐全 + 时间戳窗 + Nonce 去重;失败抛 McException 或直接写 McR.fail() 响应AuthFilter 到 WebConfiguration,顺序在 TraceIdFilter 之后、业务之前com.malk.filter.AuthInterceptor:preHandle 中签名校验 + @NoAuth 识别AuthInterceptor 到 WebMvcConfigurer,排除 exempt-pathsMcR 格式(见 design.md 错误码表)AuthFilter / AuthInterceptor 失败路径打 WARN 日志,字段:authKey / failReason / clientIp / path / timestampauthKey,TraceIdFilter 已有链路串联[%X{authKey:-}]requests + hmac)node:crypto)AuthFilterTest:enabled/disabled 切换、Header 缺失、时间窗边界、Nonce 重放AuthInterceptorTest:@NoAuth 方法级/类级、签名校验、exempt-pathsenabled: false 场景回归(零破坏验证)/Users/malk/Desktop/Tech/claude/后端/mjava-baseline.md 新增 §13(或合并到 §6)"请求鉴权与防重放"章节,含签名协议与开关openspec validate add-request-auth-replay-guard --strict 通过curl + openssl 跑通一次真实请求/opsx:archive