本系统为模块化网站前后端服务,后端提供面向前端与第三方交互的统一API,核心能力包括:用户认证与账号体系:注册、登录、发送邮箱验证码、JWT 鉴权与权限控制。用户中心:获取当前登录用户信息、修改密码、管理员更新用户信息。公告系统:公告创建/删除(管理员)、公告图片上传(管理员)、公告列表(公开展示)。maimai 业务能力:创建 maimai 数据获取任务(支持二维码字符串或二维码图片解析)、查询用户成绩、获取 Best50 数据、输出 Best50 图片(PNG)。任务系统:后台异步任务调度执行、任务状态查询、任务日志查询。WebSocket 实时推送:任务执行过程中的日志/数据/完成状态实时推送日志到前端。核心模块主要有:API 接入层(Controller) 作用:对外暴露 REST API,负责请求入口、参数校验、调用 Service、统一返回 AppResponse(或二进制图片);安全鉴权模块(Security + JWT Filter) 作用:无状态鉴权(STATLESS),通过 JWT 过滤器解析 token 并注入认证信息;对不同路径做放行/鉴权; 业务编排层(Service) 作用:承载核心业务逻辑与跨模块编排(数据库、任务、WebSocket 推送、外部系统调用等); 数据访问层(Repository + Entity) 作用:持久化与查询业务数据(用户、公告、任务、成绩等)。 特点:通过 Spring Data JPA Repository 进行数据读写,Entity 定义数据库映射;任务与调度模块(Tasks + Scheduler) 作用:封装耗时流程,异步执行(例如拉取 maimai 数据、ping 等),由 TaskService 统一调度,并产生日志与阶段性结果。WebSocket 模块 作用:为前端提供实时推送通道,主要用于任务执行过程的日志/数据/完成通知。功能路径: A. 前端/调用方访问路径(HTTP 或 WebSocket 的具体接口路径) B. 后端处理链路(Controller -> Service -> Repository/Task/WebSocket 等)
项目采用Kotlin+Spring Boot实现,整体按“Controller接口层—Service业务层—Repository/Entity数据层—任务调度层—WebSocket推送层”分层设计。Controller负责请求接入、参数校验、统一响应封装;Service负责业务编排、事务边界与跨模块协作;Repository/Entity使用JPA完成持久化;TaskService统一管理后台任务的创建、调度执行、状态与日志;WebSocket将任务日志、阶段性数据与完成事件实时推送给前端,形成“创建任务返回taskId—后台执行—实时推送/HTTP查询兜底”的闭环。设计思路强调无状态与可观测性:基于JWT进行认证授权,不依赖服务端会话;通过全局异常处理与统一返回结构保证前后端对接一致;耗时流程任务化异步执行以降低接口阻塞与超时;缓存用于减少重复读取与计算。技术栈:接口层使用Spring Web MVC;安全体系使用Spring Security+自定义JWT Filter,并对管理员能力使用方法级权限控制;数据层使用Spring Data JPA,必要场景结合事务模板或EntityManager;异步与调度使用Spring Scheduling、TaskScheduler与Kotlin协程;推送使用Spring WebSocket(TextWebSocketHandler)与会话注册表实现按uuid定向推送;缓存使用Spring Cache+Caffeine;日志与配置使用Logback与application.yml。本人负责除maimai具体业务逻辑外的全部模块实现与集成,包括鉴权、用户、公告、公共数据、任务系统、WebSocket推送、统一响应与异常处理、缓存与调度等。量化结果以流程与性能体现:流程上实现注册/登录获取token并访问受保护接口的认证闭环,实现公告图片上传与公告管理到公开列表展示的业务闭环,实现任务创建、执行、状态/日志查询与WebSocket推送的全链路闭环;性能上将耗时操作异步任务化使接口快速返回taskId,显著降低平均响应时间与超时概率,WebSocket推送减少前端轮询请求量,Caffeine缓存降低数据库与资源读取压力并提升吞吐与稳定性。