给园区监控系统加录像/截图线上存储:后端设计与踩坑记录
园区监控平台里,用户看实时视频时的截图和录像,原本是浏览器直接下载到本地。这次把它改成上传线上存储,并补齐了分页列表、查看、改名、批量删除和审计日志。这篇复盘记录几个关键的设计决策,以及过程中踩到的五个真实的坑——分页插件的 NULL 参数、通用 mapper 的 OGNL 陷阱、单测测不到的 XML 语法错误、被 distinct 折叠的测试数据,还有 PowerShell 拼 URL 的变量名陷阱。
园区监控平台里,用户看实时视频时的截图和录像,原本是浏览器直接下载到本地。这次把它改成上传线上存储,并补齐了分页列表、查看、改名、批量删除和审计日志。这篇复盘记录几个关键的设计决策,以及过程中踩到的五个真实的坑——分页插件的 NULL 参数、通用 mapper 的 OGNL 陷阱、单测测不到的 XML 语法错误、被 distinct 折叠的测试数据,还有 PowerShell 拼 URL 的变量名陷阱。
我的博客已经有项目分类、公开简历和本地搜索,但读者仍然要自己翻文章。于是我做了一个“问博客”助手:输入问题,它先从博客中找相关文章,再把少量公开片段交给 MiniMax 生成回答,并附上来源链接。
这篇记录从前端检索、Cloudflare Worker、MiniMax-M3 接入到安全部署的完整过程,也会说明它为什么还不算完整的向量 RAG,以及我准备怎样用最小成本升级。
一次经过授权的内部 CTF 复盘:四道题看似考接口绕过、数据越权和角色提权,根因却集中在鉴权策略割裂、返回字段失控与角色继承边界缺失。
从零在 Windows 11 + 16G 内存下跑通电商问数项目 shopkeeper-agent 的完整排障笔记,覆盖 Python 环境、LLM 接入、Embedding、Docker、中间件、后端启动六大环节共 13 个真实坑。
公司默认可见楼层配置(/orgFloorConfig/{orgId} 查询、POST /orgFloorConfig 保存)最初的语义是「限当前园区」——超管在 A 园区,只能给 A 内的公司配 A 的楼层。本次把它放宽为「跨园区绑定」:一个公司可以同时绑多个园区的楼层。改动只动 6 个文件 +70/-23,但牵住了查询、保存、校验三个「按当前园区」硬编码点的同步改造,是放宽约束类重构的一个干净样本。
「勾这个楼层到底覆盖几个摄像头」——超管在配置页的盲勾体验必须解决。后端用反查表把 O(N×M) 拍平成 O(N+M),前端零计算渲染,6 个单测全绿。本文把这个看起来简单的功能拆开讲。
氚云访客历史同步漏数据不是网络问题,而是分页方式、日期语义、头像容错三处都写错了。本文把三个根因、四个修复点、服务器验证步骤完整拆开,让你下次遇到第三方同步漏数据时能直接套用排查思路。
多园区切换接口能不能被前端伪造身份?改一行 parkId 就能越权吗?本文用 4 个测试用例 + 1 次反向变异验证,证明 userParkSwitch 的身份来源、授权顺序、Redis 更新顺序已被源码契约测试锁死。
多园区改造不是改几个字段那么简单。登录态、菜单、角色、同步链路、业务数据、回归兼容——任何一个模块漏测,都可能在生产里埋雷。本文把改造测试要覆盖的 7 大模块完整拆开。
dev 环境切园区后 /user/info 仍是旧园区,访客预约列表也不刷新。问题不在业务代码,而在 admin-service 和 gateway 写入了不同 Redis DB——这次把排障链路完整记录下来。