当前位置: 首页 > news >正文

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

一、个人进度总结

本阶段项目正式从方案设计转入代码落地,我的工作重心集中在后端核心业务模块的开发与联调。两周内,我独立完成了用户管理模块从数据库设计到前后端对接的全流程开发,实现了登录、注册、鉴权、个人信息维护、密码修改、阅读统计查询等完整功能。此外,我配合团队完成了数据库 ER 图最终评审、前后端接口规范统一与开发环境同步工作。

目前,用户管理模块所有核心接口已全部通过测试,前端登录、注册、个人中心页面已正常对接;模块作为整个系统的权限底座,已稳定支撑其他业务模块的身份校验需求。整体进度符合团队第一阶段开发计划,所有接口均提前交付前端同学对接,未出现阻塞其他模块开发的情况。

二、我的核心任务

用户管理是整个系统的权限底座,所有业务模块都依赖用户身份的识别与校验。我负责了该模块从数据模型设计、后端接口开发到前端联调的完整链路,前后迭代了 3 版代码,解决了鉴权、安全、异常处理等多个核心问题。

(一)数据模型与安全设计

基于团队最终评审通过的 ER 图,我设计了User实体类,除了 id、用户名、密码、邮箱、头像、个人简介等基础字段外,还增加了status(用户状态:正常 / 禁用)、last_login_time(最后登录时间)、login_ip(登录 IP)等字段,用于后续的安全审计与用户行为分析。

密码安全是用户模块的重中之重,我没有直接存储明文密码,而是使用 Spring Security 提供的BCryptPasswordEncoder进行加密处理。BCrypt 采用加盐哈希算法,每次加密相同的密码都会生成不同的哈希值,即使数据库被拖库,攻击者也无法通过彩虹表破解用户密码。同时,我限制了密码的最小长度为 6 位,要求必须包含字母和数字,提升了账户的安全性。

(二)JWT 鉴权体系实现

为了实现前后端分离的无状态鉴权,我采用了 JWT(JSON Web Token)作为身份认证方案,完整实现了令牌的生成、校验、解析与过期处理:

  1. 编写了JwtUtil工具类,封装了令牌的生成与解析逻辑,设置令牌过期时间为 24 小时,避免长期有效令牌带来的安全风险。同时添加了令牌刷新机制,用户在过期前 1 小时内操作时,自动生成新的令牌返回给前端。

  2. 自定义了JwtAuthInterceptor拦截器,实现了HandlerInterceptor接口,在请求进入 Controller 之前校验请求头中的Authorization字段。如果令牌不存在、无效或已过期,直接返回 401 未授权错误,并提示用户重新登录。

  3. 配置拦截器白名单,将登录、注册、静态资源、书籍封面等不需要鉴权的路径排除在外。这里踩了一个印象很深的坑:一开始不小心把 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 和真实产品的关键。

我也深刻体会到了 “提前设计” 的重要性。在写代码之前,我花了两天时间画数据模型图、写接口文档、梳理业务流程,虽然看起来耽误了时间,但在开发过程中几乎没有出现大的返工。如果一开始就着急写代码,后面发现数据模型设计不合理,再改起来就会非常麻烦,甚至会影响其他模块的开发。

前后端联调的过程也让我明白了沟通的重要性。很多时候,前后端出现问题不是因为代码写错了,而是因为双方对接口的理解不一致。比如字段名、参数类型、返回格式等,如果没有提前约定好,联调的时候就会出现很多不必要的问题。后来我们制定了统一的接口规范,所有接口都先写文档再开发,联调的效率提升了很多。

当然,我也发现了自己的很多不足。比如对数据库性能优化的知识还比较欠缺,现在数据量小还看不出问题,后续如果用户数量变多,可能会出现查询慢的问题;对前端的了解还不够深入,有时候不能快速理解前端同学的需求。这些都是我后续需要重点学习和改进的地方。

http://www.rkmt.cn/news/1499489.html

相关文章:

  • 【NLP自然语言处理】4.基础-文本特征处理文本数据增强
  • Function Calling 与 MCP 深度对比:从原理到实践,一文讲透区别与关系
  • 在Python中,不可变(immutable)数据类型是指一旦创建后,其内容不能被修改的数据类型
  • 2026 香奈儿名牌包包回收规则,无锡门店回收对哪些款式更热忠 - 奢侈品回收评测
  • 【Uniapp 插件 una-banner 】轮播图 / banner / swiper
  • 2026上海百达翡丽回收价格怎么算?全套、单表、成色差价明细解析 - 奢侈品回收评测
  • 素材去水印实用技巧:按场景选择工具,兼顾效率与画质
  • 伺服电机仿真(3):PMSM在三相静止坐标系下的数学模型
  • 系统规划与管理师选老师:案例不好的人,需要什么样的老师?
  • 新装修的石材为什么开裂?5大原因+预防措施(2026版) - 宁波融诚石业
  • 2026窑炉气体分析系统选购指南:全国优质厂家排名与实战经验分享 - 品研笔录
  • Python之encrypti0n包语法、参数和实际应用案例
  • 如何利用 OpenCV 将图像显示在对话框窗口上
  • 2026合肥市生成式引擎优化(GEO)技术能力权威测评报告|百分制量化技术版 - 安徽工业
  • 2026 成都爱马仕香奈儿回收指南,热门经典款行情与估价细节解析 - 奢侈品回收评测
  • 鸿蒙原生应用实战(三):笔记详情与编辑页面的路由与CRUD
  • 南宁黄金回收全攻略:精选正规门店,教你安全高价变现 - 奢侈品回收评测
  • 华三无线认证实战:绿洲平台对接中的苹果/安卓手机优化与微信白名单配置详解
  • 仙人掌-圆方树学习笔记
  • 2026年粉末包装机厂家排行:全国优质品牌推荐与详细使用攻略 - 品研笔录
  • 用安信可ESP32S3开发板做个无线监控:手把手教你驱动USB摄像头并实现Wi-Fi图传
  • MCP(Model Context Protocol)详细介绍
  • 广州市顺风搬家服务有限公司车辆类型有哪些?载重、尺寸、适用场景完整对比 - 生活服务
  • [charger][sc7061]配置
  • 用 Vim 以只读模式打开文件的几种方式
  • 高性能计算中的输出重定向:Bash与SLURM的协同工作
  • 道里正规商家榜单,收的顶领跑区域黄金回收行业 - 奢侈品回收测评
  • 哈尔滨道里高价回收店铺TOP榜,2026黄金回收收的顶稳居榜首梯队 - 奢侈品回收测评
  • 宁波石材加工厂怎么选?本地源头工厂7个筛选标准(2026版) - 宁波融诚石业
  • 别再只盯着TPM了!从国产TPCM实战出发,聊聊可信启动的静态度量与动态度量到底怎么玩