### 用户模块
- 用户注册
- 用户登录
- 获取用户信息
- 更新用户信息
- 更新头像
- 修改密码
### 文章模块
- 发布文章
- 文章列表(分页、分类、状态筛选)
- 文章详情
- 更新文章
- 删除文章
### 分类模块
- 添加分类
- 分类列表
- 分类详情
- 更新分类
- 删除分类
### 文件上传
- 单文件上传 (支持阿里云 OSS 存储)
在 BigEvent 博客系统的开发中,我采用了前后端分离的架构,后端基于 Spring Boot 2.7 搭建单体应用,严格遵循 Controller - Service - Mapper 三层分层,所有接口返回统一的 Result 结构。技术栈上,持久层用 MyBatis + MySQL 处理核心数据,缓存模块引入 Redis(StringRedisTemplate)优化高频读取,认证授权依赖 JWT + 自定义拦截器 实现无状态安全访问,文件存储对接 阿里云 OSS,参数校验则综合运用 Spring Validation 与自定义校验注解(如 @Status 校验枚举值)。
我独立负责了全部模块的编码与调试:用户模块(注册/登录/信息维护/密码修改),文章模块(发布/分页列表/详情/更新/删除),分类模块(增删改查加缓存优化),以及文件上传。最终,项目通过了全接口功能测试,响应体格式统一,核心业务逻辑正确,缓存命中率明显提升,安全拦截生效,文件上传稳定可用。
开发中遇到几个典型难点:
JWT 登出失效:无状态 token 签发后无法实时作废。我在登录时将 token 存入 Redis 并设置过期时间,拦截器校验时不仅解析 JWT 还要验证 Redis 存在性,退出时主动删除 Redis 记录,实现了 token “黑名单”机制。
缓存一致性:分类数据读取频繁但写操作少,采用 Cache Aside 模式:查询先读 Redis,未命中则查库并回写缓存;增、删、改操作后立即删除对应缓存 key,下次查询重建,避免了脏数据。
复杂分页筛选:文章列表需要按分类、状态进行多条件组合查询并分页。使用 PageHelper 分页插件搭配 MyBatis 动态 SQL ( + ),既保证了灵活性,又避免了手动拼接 SQL 导致的性能和维护问题。
自定义枚举校验:文章状态只有“草稿”和“已发布”,普通验证注解无法限制。我自定义了 @Status 注解和 StatusValidator 校验器,通过反射获取合法值集合,在 DTO 属性上声明即可,使校验代码简洁且可复用。
这些方案让我深入理解了认证流程、缓存策略与校验框架,也保证了项目在生产环境的稳定运行。