项目实训个人工作记录(四):用户管理模块全流程开发

发布时间:2026/6/10 20:06:44
项目实训个人工作记录(四):用户管理模块全流程开发 一、个人进度总结本阶段项目正式从方案设计转入代码落地我的工作重心集中在后端核心业务模块的开发与联调。两周内我独立完成了用户管理模块从数据库设计到前后端对接的全流程开发实现了登录、注册、鉴权、个人信息维护、密码修改、阅读统计查询等完整功能。此外我配合团队完成了数据库 ER 图最终评审、前后端接口规范统一与开发环境同步工作。目前用户管理模块所有核心接口已全部通过测试前端登录、注册、个人中心页面已正常对接模块作为整个系统的权限底座已稳定支撑其他业务模块的身份校验需求。整体进度符合团队第一阶段开发计划所有接口均提前交付前端同学对接未出现阻塞其他模块开发的情况。二、我的核心任务用户管理是整个系统的权限底座所有业务模块都依赖用户身份的识别与校验。我负责了该模块从数据模型设计、后端接口开发到前端联调的完整链路前后迭代了 3 版代码解决了鉴权、安全、异常处理等多个核心问题。一数据模型与安全设计基于团队最终评审通过的 ER 图我设计了User实体类除了 id、用户名、密码、邮箱、头像、个人简介等基础字段外还增加了status用户状态正常 / 禁用、last_login_time最后登录时间、login_ip登录 IP等字段用于后续的安全审计与用户行为分析。密码安全是用户模块的重中之重我没有直接存储明文密码而是使用 Spring Security 提供的BCryptPasswordEncoder进行加密处理。BCrypt 采用加盐哈希算法每次加密相同的密码都会生成不同的哈希值即使数据库被拖库攻击者也无法通过彩虹表破解用户密码。同时我限制了密码的最小长度为 6 位要求必须包含字母和数字提升了账户的安全性。二JWT 鉴权体系实现为了实现前后端分离的无状态鉴权我采用了 JWTJSON Web Token作为身份认证方案完整实现了令牌的生成、校验、解析与过期处理编写了JwtUtil工具类封装了令牌的生成与解析逻辑设置令牌过期时间为 24 小时避免长期有效令牌带来的安全风险。同时添加了令牌刷新机制用户在过期前 1 小时内操作时自动生成新的令牌返回给前端。自定义了JwtAuthInterceptor拦截器实现了HandlerInterceptor接口在请求进入 Controller 之前校验请求头中的Authorization字段。如果令牌不存在、无效或已过期直接返回 401 未授权错误并提示用户重新登录。配置拦截器白名单将登录、注册、静态资源、书籍封面等不需要鉴权的路径排除在外。这里踩了一个印象很深的坑一开始不小心把 AI 桥接接口/api/ai/**也加入了拦截范围导致赵晓涛同学开发的 AI 占位接口一直返回 401 错误我们前后排查了一个多小时对比了请求头和拦截器日志才发现问题。三核心接口开发与异常处理我一共开发了 8 个 RESTful 风格的核心接口覆盖了用户生命周期的所有基础操作POST /api/auth/login用户登录接口验证用户名和密码成功后返回 JWT 令牌、用户基本信息与过期时间失败时返回具体的错误信息用户名不存在 / 密码错误而不是统一的 “登录失败”提升用户体验。POST /api/auth/register用户注册接口先校验用户名和邮箱的唯一性再对密码进行加密后存入数据库。添加了参数校验注解NotBlank、Email自动校验请求参数的合法性。GET /api/user/info获取当前登录用户的详细信息从 JWT 令牌中解析用户 ID查询数据库后返回。PUT /api/user/info更新用户个人信息支持修改昵称、头像、个人简介校验用户只能修改自己的信息。PUT /api/user/password修改密码接口需要验证原密码验证通过后才能更新为新密码。GET /api/user/reading-stat获取用户阅读统计数据包括累计阅读时长、已读书籍数量、连续打卡天数。POST /api/user/logout用户退出登录接口前端清除本地存储的令牌即可。为了统一接口的返回格式我定义了通用的ApiResult类所有接口都返回统一的 JSON 结构包含code状态码、message提示信息、data返回数据三个字段。同时使用全局异常处理器GlobalExceptionHandler捕获所有业务异常统一处理后返回给前端避免了在每个 Controller 中重复写 try-catch 代码。四前端对接与联调后端接口开发完成后我完成了前端登录、注册和个人中心页面的对接工作。前端登录成功后将 JWT 令牌存储在localStorage中并配置了 Axios 请求拦截器自动在每个请求的头中添加Authorization: Bearer {token}字段。同时我在前端实现了路由守卫对需要登录才能访问的页面如个人中心、社区发帖进行拦截。如果用户未登录自动跳转到登录页面登录成功后再跳转回用户原本要访问的页面提升了用户体验。联调过程中我们发现了一些接口参数不匹配的问题比如后端返回的用户头像字段是avatar而前端用的是headImg及时统一了字段命名规范。三、关键技术细节与踩坑记录3.1 JWT 拦截器路径排除的坑问题现象开发 AI 桥接层时所有调用/api/ai/**的请求都返回 401 未授权错误但 AI 接口不需要登录就能访问。排查过程我先检查了请求头确认已经携带了正确的令牌然后在拦截器中添加了日志打印请求的 URL发现 AI 请求确实被拦截了。最后对比了拦截器的配置才发现我忘记把/api/ai/**添加到排除路径中。解决方案在WebMvcConfig的拦截器配置中添加/api/ai/**到排除路径列表Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(jwtAuthInterceptor) .addPathPatterns(/**) .excludePathPatterns( /api/auth/**, /api/ai/**, /uploads/**, /static/** ); }后续改进将所有不需要鉴权的路径统一配置在application.yml文件中通过ConfigurationProperties读取避免硬编码导致的遗漏。四、阶段心得与感悟两周的后端开发让我对 Spring Boot 和业务系统开发有了全新的认识。以前在课堂上写的都是简化的 demo只要实现核心逻辑就行不需要考虑太多边界情况。但真正做项目才发现一个看似简单的登录功能背后要考虑密码安全、令牌过期、异常处理、参数校验等十几个细节。这些细节直接决定了系统的稳定性和用户体验也是区分 demo 和真实产品的关键。我也深刻体会到了 “提前设计” 的重要性。在写代码之前我花了两天时间画数据模型图、写接口文档、梳理业务流程虽然看起来耽误了时间但在开发过程中几乎没有出现大的返工。如果一开始就着急写代码后面发现数据模型设计不合理再改起来就会非常麻烦甚至会影响其他模块的开发。前后端联调的过程也让我明白了沟通的重要性。很多时候前后端出现问题不是因为代码写错了而是因为双方对接口的理解不一致。比如字段名、参数类型、返回格式等如果没有提前约定好联调的时候就会出现很多不必要的问题。后来我们制定了统一的接口规范所有接口都先写文档再开发联调的效率提升了很多。当然我也发现了自己的很多不足。比如对数据库性能优化的知识还比较欠缺现在数据量小还看不出问题后续如果用户数量变多可能会出现查询慢的问题对前端的了解还不够深入有时候不能快速理解前端同学的需求。这些都是我后续需要重点学习和改进的地方。

相关新闻

三、SCI熟词生意(一)

三、SCI熟词生意(一)

2026/6/10 20:06:44
二、SCI常用逻辑词

二、SCI常用逻辑词

2026/6/10 20:06:44

周新闻

月新闻