Skip to content

L03-13 Harness:把七道防护装进一个入口 ​

全局中心内容:防护散落各处必然遗漏,唯一的解法是「所有执行必须经过一个入口」。 全局讲解主线:为什么需要 Harness → Guard 链设计 → 顺序 → 短路语义 → 编码 → 演示 → 扩展 → 验收。


P1 · 产出页 ​

中心内容:一个 AgentHarness + 七道 Guard 的有序责任链。

  • 讲解技巧
    • 开场回顾:前面七节课讲了七道防护,问学员**「你怎么保证每个调用都过一遍?」**
    • 答案:靠人自觉是不可能的,必须靠架构强制。
  • 时长:30s

P2 · 为什么需要总装 ​

中心内容:分散的防护会出现「某条链路漏了一道」。

  • 讲解技巧
    • 举真实例子:加了审批,但离线任务走的是另一个入口,绕过了审批。
    • 结论:入口只要有两个,防护就会不一致。
  • 时长:4min

P3 · Guard 接口 ​

中心内容:一个极简接口,所有防护都实现它。

  • 页面内容:Guard { int getOrder(); GuardResult check(Context); }

  • 讲解技巧

    • 强调接口要极简:输入上下文、输出结果,不耦合具体实现。
    • 讲清返回值要能表达「通过 / 拒绝 / 需审批」三种语义。
  • 时长:5min


P4 · 七道 Guard ​

中心内容:预算 → 循环 → 超时 → 熔断 → 权限 → 审批 → 审计。

  • 页面内容:每道 Guard 的职责与触发动作

  • 讲解技巧

    • 逐道快速过一遍(每道 30 秒),让学员看到它们正好覆盖了前面七节。
    • 这一页是本章的「合拢」时刻,要讲得有气势。
  • 时长:6min


P5 · 顺序为什么重要 ​

中心内容:便宜的检查放前面,贵的放后面。

  • 页面内容:顺序图与错序的后果

  • 讲解技巧

    • 举例:审计放最前面会记录大量根本没执行的请求,既浪费又误导。
    • 强调原则:先做能快速否决的检查。
  • 时长:5min


P6 · 短路语义 ​

中心内容:任何一道 Guard 拒绝,后面不再执行。

  • 讲解技巧
    • 讲清拒绝后也要走「收尾」:记录审计、通知用户、更新状态。
    • 提醒:被拒绝不等于异常,要给出清晰的原因。
  • 时长:4min

P7 · 编码:责任链装配 ​

中心内容:利用 Spring 的集合注入自动按 order 排序。

  • 页面内容:AgentHarness 实现与 List<Guard> 注入

  • 讲解技巧

    • 这是本节最漂亮的一处:新增一道防护只需加一个 Bean,不用改 Harness。
    • 提醒 order 要留间隔(10、20、30),方便将来插入。
  • 时长:7min


P8 · 现场演示 ​

中心内容:故意触发每一道 Guard,看是否被拦下。

  • 讲解技巧
    • 演示清单:超预算 / 重复动作 / 超时 / 未授权工具 / 需审批 / 含敏感信息。
    • 让学员看到六道全部生效,这是最有力的收尾。
  • 时长:6min

P9 · 扩展与取舍 ​

中心内容:Guard 太多会拖慢执行,要区分同步/异步。

  • 讲解技巧
    • 给建议:审计类 Guard 异步化,安全类必须同步。
  • 时长:4min

P10 · 避坑与小结 ​

中心内容:Harness 的价值是「防遗漏」,不是「防聪明人绕过」。

  • 讲解技巧
    • 强调配套措施:代码评审要检查「有没有绕过 Harness 的直接调用」。
    • 引出下一节:装上 Harness 之后,做三个真实案例——03-14 起。
  • 时长:2min

讲师备忘 ​

项内容
课前必做准备七道 Guard 的清单;准备逐个触发的演示脚本
最容易超时处P8 演示,六道 Guard 逐一触发耗时——提前调好参数
学员最常问「Guard 会影响性能吗?」答:同步安全检查是微秒级,可忽略
现场备用演示失败 → 逐个看 Guard 的单元测试