项目导航站需求设计之功能文档

产品原型图

一、核心功能模块概览

功能模块 说明 难点
用户注册 新用户注册账户并设置密码 校验用户名/密码合法性、账号是否重复
用户登录 用户凭账号+密码登录 登录态管理,密码加密,Token 认证(如 Sa-Token)
用户信息查询 获取当前登录用户信息 鉴权 + 敏感信息脱敏处理
用户信息更新 用户更新个人资料(昵称、头像、电话等) 参数合法性校验,权限控制
用户列表查询 管理员查看所有用户 仅管理员可用,分页 + 模糊搜索
用户删除 逻辑删除用户(isDelete = 1) 权限校验,防止误删
用户注销 用户自主注销账户 鉴权后设置逻辑删除
权限控制 区分用户与管理员身份 使用 Sa-Token 结合角色字段 userRole
登录状态校验 判断用户是否已登录 携带 Token 检查会话是否有效

二、功能设计文档(重点难点模块)

2.1 用户注册功能

1. 功能说明

  • 用户输入 userAccountuserPasswordcheckPassworduserName进行注册。

2. 实现要点

  • 账号长度需在 4~20 位之间,不含特殊字符
  • 密码强度检测(长度 ≥ 8 位,必须包含字母和数字)
  • 校验密码一致性
  • 加密存储密码(MD5 + 盐值加密) //TODO 安全性不高,后期考虑接入权限框架
  • 校验账号唯一性(数据库查询)
  • 分配默认头像

2.2 用户登录功能

1. 功能说明

  • 用户输入账号和密码登录,成功后保存到Session

2. 实现思路

  • 账号长度需在 4~20 位之间,不含特殊字符

  • 因使用MD5加密,密码再加密后与数据库加密密码进行对比

  • 对用户进行脱敏

  • 保存用户的Session后返回脱敏后的用户对象

2.3 权限控制功能 //TODO 后期接入SaToken

1. 功能说明

  • 系统通过Session获取 userRole 字段判断权限
    • 0:普通用户
    • 1:管理员

2. 实现方案

  • 封装效验方法,所有接口手动校验
  • 普通用户只能访问/修改自己的信息,管理员可管理所有用户

三、数据表设计

字段名 类型 约束/默认值 说明
id bigint 主键,自增 用户唯一 ID
userName varchar(64) 可为空 用户昵称
userAccount varchar(64) 可为空 用户账号
avatarUrl varchar(1024) 可为空 用户头像 URL
gender tinyint 可为空 性别
userPassword varchar(128) 非空 用户密码(加密)
phone varchar(20) 可为空 电话
email varchar(128) 可为空 邮箱
userStatus int 默认 0,非空 用户状态(0 正常)
createTime datetime 默认 CURRENT_TIMESTAMP 创建时间
updateTime datetime 默认 CURRENT_TIMESTAMP 更新时间
isDelete tinyint 默认 0,非空 是否删除(0 未删)
userRole int 默认 0,非空 用户角色(0 普通用户,1 管理员)

四、知识点补充

Spring Boot 中使用 Session 记录用户登录态的完整流程

1. 用户首次访问

  • 客户端首次访问后端接口,服务器端(Tomcat)会创建一个新的匿名 Session
  • 后端会在响应头中通过 Set-Cookie 指令,将该 SessionId 设置到客户端浏览器 Cookie 中。

2. 用户登录

  • 用户提交账号密码登录,后端校验成功后,将用户信息(如 userId、userName)绑定到当前的 Session 上

    session.setAttribute("user", user);
    
  • 后端仍会使用相同的 SessionId 响应,这样前端浏览器的 Cookie 保持不变,仍记录着该 Session。

  • 浏览器接收到后端返回的 Set-Cookie 指令后,会将 SessionId 保存到本地 Cookie 中,例如:

    Cookie: JSESSIONID=xxxxxx
    

4. 后续请求

  • 浏览器发送请求时自动携带 Cookie(包含 SessionId)

  • 后端根据 Cookie 中的 SessionId 找到对应的 Session。

  • 然后从 Session 中读取用户信息判断是否已登录:

    Object user = session.getAttribute("user");
    

5. 总结时序流程(简图):

[前端] ---首次访问---> [后端]
             <--- 返回 Set-Cookie (JSESSIONID)

[前端] ---提交账号密码---> [后端]
             <--- 登录成功,绑定用户信息到 Session

[前端] ---携带 Cookie 请求---> [后端]
         (JSESSIONID=xxxx)
             ---> 后端根据 SessionId 获取用户信息

欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 1701220998@qq.com
导航页 GitHub