tasks.md 2.5 KB

1. 模块脚手架

  • 1.1 复制 mjava-mcli/mjava-com/
  • 1.2 改 pom.xml artifactId 为 mjava-com
  • 1.3 改 Boot.java package 为 com.malk.com_(注意避开 java 保留字 com,用 com_gw
  • 1.4 改 application.yml port=9020 + context-path=/api/com
  • 1.5 根 pom <modules> 追加 <module>mjava-com</module>
  • 1.6 编译冒烟通过

2. 调用方鉴权

  • 2.1 com.malk.com_.auth.CallerProfile(数据类)
  • 2.2 CallerRegistryService(查宜搭权限表单,缓存 + 刷新)
  • 2.3 CallerAuthInterceptor(时间窗 → callerId → HMAC-SHA256 → enabled)
  • 2.4 注册拦截器到 WebMvcConfigurer,排除 /health 等公共端点

3. 动作注册

  • 3.1 ActionRegistryMap<String, ActionHandler>
  • 3.2 ActionHandler 接口:McR handle(CallerProfile caller, JSONObject body)
  • 3.3 DingtalkActionRegistry:在 @PostConstruct 注册至少 3 个 action(user.get / dept.list / workflow.start)作为首批
  • 3.4 AliworkActionRegistry:首批 3 action(form.save / form.list / form.update)
  • 3.5 ActionWhitelistConfig(读 application.yml com.actions.enabled

4. 网关 Controller

  • 4.1 GatewayController 路由 POST /{vendor}/{action}
  • 4.2 三层校验(代码 registry / yml whitelist / caller.allowedActions)
  • 4.3 统一异常返回 McR(AUTH_FAILED / ACTION_FORBIDDEN / RATE_LIMITED / VENDOR_ERROR)

5. 限流

  • 5.1 CallerRateLimiter(Guava RateLimiter per callerId,LRU 容量 500)
  • 5.2 拦截器链路:Auth → RateLimit → Gateway

6. 审计日志

  • 6.1 在基座 UtilHttp 审计基础上,com 侧拦截器补写入 MDC(callerId / vendorAction)
  • 6.2 logback-spring.xml 为 mjava-com 输出 ./log/{日期}/com-%X{callerId}.log

7. 配置与文档

  • 7.1 application-dev.yml.example(com.caller.registry.* + com.actions.enabled 示例)
  • 7.2 application-prod.yml.example(同上占位)
  • 7.3 README.md:外部系统对接步骤、signature 算法示例(Python / Node.js 样例代码)
  • 7.4 更新 mjava-baseline.md 表格里 mjava-com 状态为"已实施"

8. 验证

  • 8.1 单元测试:HmacSignatureTest / CallerRegistryTest
  • 8.2 集成冒烟:模拟外部 Python 客户端签名 → 调 /dingtalk/user.get → 验证成功 & 失败(签名错、过期、限流、未启用 action)
  • 8.3 压测:单个 caller 限流准确性(RateLimiter 容差)
  • 8.4 /opsx:validate add-mjava-com --strict 通过