Skip to content

5.7 演示模式 ​

概述

演示模式(app.demo)为对外演示站设计:读操作照常、写操作一律拦截。一套配置让演示站可浏览、可登录、但不可篡改数据。

工作原理(middleware/demo.go) ​

text
app.demo = true 时(中间件链第 4 层):

  放行:
    * GET / HEAD / OPTIONS(读操作,演示站可浏览)
    * 公开白名单路径(/api/login、/api/captcha 等,保证演示站可登录)

  拦截:
    * 其余写操作(POST / PUT / PATCH / DELETE)
      → code=1015 "演示环境,禁止操作!"

app.demo = false(生产默认):中间件直接放行,零开销

配置 ​

yaml
app:
  demo: false    # 演示模式:为 true 时写操作一律拒绝,读操作与登录类公开接口放行

拦截行为细节 ​

请求demo=true 行为
GET /api/user/page✅ 放行(浏览)
POST /api/login✅ 放行(公开白名单,演示站可登录)
GET /api/captcha✅ 放行(公开白名单)
POST /api/user/add❌ 1015 演示环境,禁止操作!
PUT /api/user/update❌ 1015
DELETE /api/user/delete/1❌ 1015
POST /api/upload/uploadFile❌ 1015

设计取舍 ​

text
为什么按 HTTP 方法而非路径白名单拦截:
  * 写操作方法(POST/PUT/PATCH/DELETE)与语义严格对应,无遗漏风险
  * 免维护"哪些写接口可放行"的清单
  * 登录/验证码是 GET 或公开白名单路径,天然不受影响

代价:demo 模式下无法演示"新增/编辑"交互——这是有意的取舍,
     数据安全优先于演示完整性。

使用建议 ​

环境隔离

  • 演示站:app.demo: true + 独立数据库 + 独立 jwt.secret
  • 本地开发:app.demo: false(否则改不动数据还以为是权限问题)
  • 生产:app.demo: false(发布检查清单项)

排障 ​

症状判断
写操作全部报"演示环境,禁止操作!"app.demo: true,改回 false 并重启
只有部分写操作被拦不应出现——demo 按方法拦截无差别生效;若出现检查是否 429 限流或 403 权限的干扰
演示站登录后点什么都报 1015正常现象,公开白名单仅覆盖登录链路

小蚂蚁云团队 · 提供技术支持