产品原型图
一、核心功能模块概览
| 功能模块 | 说明 | 难点 |
|---|---|---|
| 用户注册 | 新用户注册账户并设置密码 | 校验用户名/密码合法性、账号是否重复 |
| 用户登录 | 用户凭账号+密码登录 | 登录态管理,密码加密,Token 认证(如 Sa-Token) |
| 用户信息查询 | 获取当前登录用户信息 | 鉴权 + 敏感信息脱敏处理 |
| 用户信息更新 | 用户更新个人资料(昵称、头像、电话等) | 参数合法性校验,权限控制 |
| 用户列表查询 | 管理员查看所有用户 | 仅管理员可用,分页 + 模糊搜索 |
| 用户删除 | 逻辑删除用户(isDelete = 1) | 权限校验,防止误删 |
| 用户注销 | 用户自主注销账户 | 鉴权后设置逻辑删除 |
| 权限控制 | 区分用户与管理员身份 | 使用 Sa-Token 结合角色字段 userRole |
| 登录状态校验 | 判断用户是否已登录 | 携带 Token 检查会话是否有效 |
二、功能设计文档(重点难点模块)
2.1 用户注册功能
1. 功能说明
- 用户输入
userAccount、userPassword、checkPassword、userName进行注册。
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。
3. 浏览器保存 Cookie
浏览器接收到后端返回的
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