「周围还有多少人和我一样在摸鱼?」是职场人群的普遍情绪需求,但位置社交赛道长期被两头卡住:主流社交产品绑定实名身份,熟人环境下不敢表达真实状态;传统 LBS 应用又把用户精确位置当数据资产,隐私焦虑让用户不敢开定位。本项目立项「白日梦地图」——一款匿名状态打卡微信小程序,用户在地图上看到周围一圈陌生人此刻的状态图标(在摸鱼/在加班/在发呆),以轻量、无身份负担的方式满足情绪共鸣;并以“全链路匿名 + 位置脱敏”的产品设计,正面解决位置社交最核心的隐私信任问题。
点击空白处退出提示
「周围还有多少人和我一样在摸鱼?」是职场人群的普遍情绪需求,但位置社交赛道长期被两头卡住:主流社交产品绑定实名身份,熟人环境下不敢表达真实状态;传统 LBS 应用又把用户精确位置当数据资产,隐私焦虑让用户不敢开定位。本项目立项「白日梦地图」——一款匿名状态打卡微信小程序,用户在地图上看到周围一圈陌生人此刻的状态图标(在摸鱼/在加班/在发呆),以轻量、无身份负担的方式满足情绪共鸣;并以“全链路匿名 + 位置脱敏”的产品设计,正面解决位置社交最核心的隐私信任问题。
项目由微信小程序客户端与 Spring Boot 后端组成。后端分为五个模块:① 匿名登录——微信 code2Session 一键登录,自动生成随机昵称,支持单设备登出、全设备登出、多端会话数上限;② 状态打卡——内置“在摸鱼/在加班/在发呆/在吃饭/在睡觉”五个预设及自定义文案,打卡有时效(默认 1 小时自动过期),支持分页查询打卡历史;③ 附近的人——基于 Redis GEO 的半径查询,结果脱敏返回(距离分桶 + 大致方向 + 状态图标,不暴露精确坐标);④ 个人中心——头像上传转存云存储并带 emoji 兜底、账户注销;⑤ 系统支撑——统一响应信封与全局异常、接口限流、HTTPS 强制、日志脱敏、打卡过期清理与数据保留策略。小程序端负责 wx.login 静默登录、打卡上报、地图展示附近状态、chooseAvatar 头像选择与上传。
技术栈:Java 21 + Spring Boot + MySQL/Spring Data JPA + Redis(GEO / 会话 / 限流)+ Cloudflare R2 对象存储 + Docker Compose + GitHub Actions CI;前端为微信小程序。
具体任务(独立完成后端全栈):从零设计 REST API 并完成 8 个功能迭代;基于 Redis GEO 实现“附近的人”并做距离分桶、方向模糊化等隐私脱敏;自研 TokenStore 会话体系(Redis ZSET 反向索引支撑会话数上界与 logout-all,修复“注销后旧 token 仍可访问”的真实漏洞);微信登录 mock/real 双 profile 实现;头像转存 Cloudflare R2(magic bytes 白名单三道校验、immutable 长缓存、注销时批量清理);打卡过期、数据保留、账户注销三个定时任务(Redis 分布式锁 + afterCommit 保证 DB/Redis 一致性);安全加固全链路(openid 加盐哈希入库、HTTPS 强制、IP+用户双维限流、请求体上限、安全响应头、日志脱敏、SQL 注入审计与回归测试);98+ 单元测试;CI 集成 OWASP dependency-check 漏洞扫描并调优 NVD 缓存策略;Docker Compose 一键部署(健康检查、init.sql 自愈、DB 最小权限账号)。
亮点与难点:① 会话吊销的双向索引设计——score 用过期时刻而非签发时刻并维护“索引 TTL ≥ 成员 TTL”不变量,杜绝幽灵 token 与“token 永久无法吊销”的静默漏洞;② 附近查询的复合索引设计使 SQL 性能与清理任务的运行状态解耦;③ 匿名与隐私落到实现层——openid 只存加盐哈希、坐标永不返回。



评论