1. 用户认证与管理模块
1.1 注册(POST /api/v1/auth/register)
交互时序图
前端 (Vue + UniApp) --> 后端 (Spring Boot)
1. 用户在注册页面填写注册信息
2. 前端发送POST请求至 /api/v1/auth/register
3. 后端接收请求,进行数据校验
4. 后端加密密码,存储用户信息至数据库
5. 后端返回注册成功响应
6. 前端显示注册成功提示,跳转至登录页面
详细流程
- 用户操作:
-
- 用户在注册页面填写用户名、密码、邮箱、电话、打球水平及兴趣标签等信息。
- 前端请求:
-
- 前端通过Vue或UniApp框架,使用Axios或其他HTTP客户端发送一个
POST
请求至/api/v1/auth/register
,请求体包含用户填写的注册信息。
- 前端通过Vue或UniApp框架,使用Axios或其他HTTP客户端发送一个
- 后端处理:
-
- 数据校验:
-
-
- 后端使用Spring Boot接收请求,首先进行数据格式和必填项校验。
- 检查用户名、邮箱、电话是否唯一。
-
-
- 密码加密:
-
-
- 使用bcrypt对用户密码进行加密处理。
-
-
- 存储数据:
-
-
- 将用户信息存储到users表中,包括加密后的密码和其他相关信息。
-
- 数据库操作:
-
- 执行
INSERT
语句,将用户数据写入数据库。
- 执行
- 后端响应:
-
- 注册成功后,后端返回一个成功消息及新用户的
user_id
。
- 注册成功后,后端返回一个成功消息及新用户的
- 前端反馈:
-
- 前端接收响应后,显示注册成功提示,并引导用户跳转至登录页面。
1.2 登录(POST /api/v1/auth/login)
交互时序图
前端 (Vue + UniApp) --> 后端 (Spring Boot)
1. 用户在登录页面输入用户名和密码
2. 前端发送POST请求至 /api/v1/auth/login
3. 后端验证用户凭证
4. 后端生成JWT Token
5. 后端返回Token及用户信息
6. 前端存储Token,跳转至首页
详细流程
- 用户操作:
-
- 用户在登录页面输入用户名和密码。
- 前端请求:
-
- 前端发送一个
POST
请求至/api/v1/auth/login
,请求体包含用户名和密码。
- 前端发送一个
- 后端处理:
-
- 用户验证:
-
-
- 后端从users表中查找对应的用户名。
- 使用bcrypt验证密码是否匹配。
-
-
- 生成Token:
-
-
- 验证通过后,后端使用JWT生成一个Token,包含用户的基本信息和权限。
-
- 后端响应:
-
- 返回JWT Token及部分用户信息(如
user_id
、username
、level
、preferences
)。
- 返回JWT Token及部分用户信息(如
- 前端存储与跳转:
-
- 前端接收响应,将Token存储在本地(如
localStorage
或Vuex
)。 - 跳转至首页或用户主页,并根据Token设置用户的登录状态。
- 前端接收响应,将Token存储在本地(如
1.3 获取用户信息(GET /api/v1/users/{id})
交互时序图
前端 (Vue + UniApp) --> 后端 (Spring Boot)
1. 用户访问个人资料页面
2. 前端发送GET请求至 /api/v1/users/{id},携带JWT Token
3. 后端验证Token
4. 后端从数据库获取用户信息
5. 后端返回用户信息
6. 前端展示用户信息
详细流程
- 用户操作:
-
- 用户在个人中心页面查看或编辑个人信息。
- 前端请求:
-
- 前端发送一个
GET
请求至/api/v1/users/{id}
,其中{id}
为当前登录用户的ID。 - 请求头中包含
Authorization: Bearer <JWT_TOKEN>
。
- 前端发送一个
- 后端处理:
-
- Token验证:
-
-
- 使用Spring Security解析并验证JWT Token。
- 确认Token有效且未过期。
-
-
- 权限检查:
-
-
- 确保用户有权限访问该用户信息(通常是请求者本人或管理员)。
-
-
- 数据查询:
-
-
- 从users表中查询对应用户的详细信息。
-
- 后端响应:
-
- 返回包含用户详细信息的JSON响应。
- 前端展示:
-
- 前端接收响应后,将用户信息展示在个人资料页面,供用户查看或编辑。
1.4 更新用户信息(PUT /api/v1/users/{id})
交互时序图
前端 (Vue + UniApp) --> 后端 (Spring Boot)
1. 用户在个人资料页面编辑信息
2. 前端发送PUT请求至 /api/v1/users/{id},携带JWT Token和更新数据
3. 后端验证Token和权限
4. 后端更新数据库中的用户信息
5. 后端返回更新成功响应
6. 前端显示更新成功提示
详细流程
- 用户操作:
-
- 用户在个人资料页面修改邮箱、电话、打球水平或兴趣标签等信息。
- 前端请求:
-
- 前端发送一个
PUT
请求至/api/v1/users/{id}
,请求体包含需要更新的字段。 - 请求头中包含
Authorization: Bearer <JWT_TOKEN>
。
- 前端发送一个
- 后端处理:
-
- Token验证:
-
-
- 验证JWT Token的有效性。
-
-
- 权限检查:
-
-
- 确认用户有权限更新该用户信息。
-
-
- 数据校验:
-
-
- 验证更新数据的格式和合法性。
- 检查更新后的邮箱、电话是否唯一(若有更改)。
-
-
- 数据更新:
-
-
- 更新users表中对应用户的记录。
-
- 数据库操作:
-
- 执行
UPDATE
语句,修改用户信息。
- 执行
- 后端响应:
-
- 返回一个成功消息,确认用户信息已更新。
- 前端反馈:
-
- 前端接收响应后,显示更新成功提示,并刷新个人资料页面以展示最新信息。
2. 匹配服务模块
2.1 获取匹配球友(GET /api/v1/matches)
交互时序图
前端 (Vue + UniApp) --> 后端 (Spring Boot)
1. 用户在匹配页面设置匹配条件
2. 前端发送GET请求至 /api/v1/matches,携带查询参数和JWT Token
3. 后端验证Token
4. 后端根据条件查询匹配球友
5. 后端返回匹配结果
6. 前端展示匹配结果(动态卡片/盲盒)
详细流程
- 用户操作:
-
- 用户在匹配页面选择匹配条件,如区域范围、打球水平、时间段偏好,或选择随机匹配。
- 前端请求:
-
- 前端根据用户选择的条件,构建查询参数,并发送一个
GET
请求至/api/v1/matches
。 - 请求头中包含
Authorization: Bearer <JWT_TOKEN>
。 - 示例URL:
/api/v1/matches?distance=5&level=进阶玩家&random=true
- 前端根据用户选择的条件,构建查询参数,并发送一个
- 后端处理:
-
- Token验证:
-
-
- 验证JWT Token的有效性。
-
-
- 参数解析与校验:
-
-
- 解析查询参数,设置默认值(如默认距离5公里)。
- 校验参数的合法性。
-
-
- 匹配算法执行:
-
-
- 区域定位:
-
-
-
-
- 使用用户的地理位置(存储在users表中)筛选3-5公里范围内的其他用户。
-
-
-
-
- 打球水平筛选:
-
-
-
-
- 根据用户选择的打球水平(初学者、进阶玩家、随便挥拍)筛选匹配对象。
-
-
-
-
- 时间段偏好:
-
-
-
-
- 根据用户的时间偏好进一步筛选。
-
-
-
-
- 随机匹配:
-
-
-
-
- 若选择随机匹配,打乱筛选后的用户列表,随机选择一定数量的匹配对象。
-
-
-
-
- 兴趣标签匹配:
-
-
-
-
- 根据用户的兴趣标签,优先匹配兴趣相似的用户。
-
-
-
-
- 动态分数匹配:
-
-
-
-
- 考虑用户的评分记录,优先匹配评分较高且互评良好的用户。
-
-
- 数据库操作:
-
- 执行
SELECT
查询,从users表中筛选符合条件的用户。
- 执行
- 后端响应:
-
- 返回一个包含匹配球友信息的JSON数组,包含每个匹配对象的基本信息及匹配类型。
- 前端展示:
-
- 前端接收响应后,通过动态卡片或盲盒形式展示匹配结果。
- 用户可以选择接受或拒绝匹配结果。
2.2 创建匹配记录(POST /api/v1/matches)
交互时序图
前端 (Vue + UniApp) --> 后端 (Spring Boot)
1. 用户接受匹配结果或发起匹配
2. 前端发送POST请求至 /api/v1/matches,携带匹配对象ID和匹配类型
3. 后端验证Token
4. 后端创建匹配记录并存储至数据库
5. 后端返回匹配成功响应
6. 前端显示匹配成功提示,更新匹配历史
详细流程
- 用户操作:
-
- 用户在匹配页面接受某个匹配球友的匹配请求,或主动发起一个匹配请求。
- 前端请求:
-
- 前端发送一个
POST
请求至/api/v1/matches
,请求体包含matched_user_id
和match_type
。 - 请求头中包含
Authorization: Bearer <JWT_TOKEN>
。 - 示例请求体:
- 前端发送一个
{
"matched_user_id": 2,
"match_type": "条件匹配"
}
- 后端处理:
-
- Token验证:
-
-
- 验证JWT Token的有效性。
-
-
- 用户存在性验证:
-
-
- 确认
matched_user_id
对应的用户存在且未被禁用。
- 确认
-
-
- 匹配记录创建:
-
-
- 在matches表中创建一条新的匹配记录,记录匹配双方的用户ID、匹配类型、状态(待确认)、创建时间等信息。
-
-
- 通知对方用户(可选):
-
-
- 如果需要,可以通过消息推送或其他方式通知被匹配的用户有新的匹配请求。
-
- 数据库操作:
-
- 执行
INSERT
语句,将匹配记录写入matches表。
- 执行
- 后端响应:
-
- 返回一个成功消息及新创建的
match_id
。
- 返回一个成功消息及新创建的
- 前端反馈:
-
- 前端接收响应后,显示匹配成功提示,并将新匹配记录添加到用户的匹配历史中。
2.3 获取匹配详情(GET /api/v1/matches/{match_id})
交互时序图
前端 (Vue + UniApp) --> 后端 (Spring Boot)
1. 用户查看特定匹配记录的详情
2. 前端发送GET请求至 /api/v1/matches/{match_id},携带JWT Token
3. 后端验证Token和权限
4. 后端查询匹配详情
5. 后端返回匹配详情信息
6. 前端展示匹配详情
详细流程
- 用户操作:
-
- 用户在匹配历史中点击某一匹配记录,查看详细信息。
- 前端请求:
-
- 前端发送一个
GET
请求至/api/v1/matches/{match_id}
,其中{match_id}
为特定匹配记录的ID。 - 请求头中包含
Authorization: Bearer <JWT_TOKEN>
。
- 前端发送一个
- 后端处理:
-
- Token验证:
-
-
- 验证JWT Token的有效性。
-
-
- 权限检查:
-
-
- 确认请求用户是匹配记录中的一方,或具有相应的查看权限。
-
-
- 数据查询:
-
-
- 从matches表中查询对应的匹配记录。
- 联合查询users表获取匹配双方的详细信息。
-
- 数据库操作:
-
- 执行
SELECT
语句,查询matches和相关的users信息。
- 执行
- 后端响应:
-
- 返回包含匹配详情的JSON对象,包括匹配双方的用户信息、匹配类型、状态、创建和更新时间等。
- 前端展示:
-
- 前端接收响应后,将匹配详情展示在匹配详情页面,包括双方的个人信息、匹配记录状态等。
3. 聊天服务模块
3.1 发送消息(POST /api/v1/messages)
交互时序图
前端 (Vue + UniApp) --> 后端 (Spring Boot) --> 数据库 (MySQL)
1. 用户在聊天页面发送消息
2. 前端发送POST请求至 /api/v1/messages,携带消息内容和匹配ID
3. 后端验证Token和匹配关系
4. 后端存储消息至数据库
5. 后端通过WebSocket推送消息给接收者
6. 后端返回消息发送成功响应
7. 前端显示已发送的消息
详细流程
- 用户操作:
-
- 用户在聊天页面输入消息内容,并点击发送按钮。
- 前端请求:
-
- 前端发送一个
POST
请求至/api/v1/messages
,请求体包含match_id
、receiver_id
和message
内容。 - 请求头中包含
Authorization: Bearer <JWT_TOKEN>
。 - 示例请求体:
- 前端发送一个
{
"match_id": 1001,
"receiver_id": 2,
"message": "你好,约个时间打球吧!"
}
- 后端处理:
-
- Token验证:
-
-
- 验证JWT Token的有效性。
-
-
- 匹配关系验证:
-
-
- 确认当前用户与
receiver_id
之间存在有效的匹配记录(状态为已确认)。
- 确认当前用户与
-
-
- 消息存储:
-
-
- 将消息内容存储到messages表中,记录发送者、接收者、消息内容和时间戳。
-
-
- 实时推送:
-
-
- 通过WebSocket将新消息推送给接收者,确保消息即时到达。
-
- 数据库操作:
-
- 执行
INSERT
语句,将消息记录写入messages表。
- 执行
- 后端响应:
-
- 返回一个成功消息及消息的时间戳。
- 前端反馈:
-
- 前端接收响应后,将已发送的消息显示在聊天界面,并清空输入框。
3.2 获取聊天记录(GET /api/v1/messages/{match_id})
交互时序图
前端 (Vue + UniApp) --> 后端 (Spring Boot)
1. 用户进入聊天页面,需加载历史消息
2. 前端发送GET请求至 /api/v1/messages/{match_id},携带JWT Token
3. 后端验证Token和匹配关系
4. 后端查询数据库获取聊天记录
5. 后端返回聊天记录
6. 前端展示聊天历史
详细流程
- 用户操作:
-
- 用户在聊天页面打开与某个匹配球友的聊天窗口,需要加载之前的聊天记录。
- 前端请求:
-
- 前端发送一个
GET
请求至/api/v1/messages/{match_id}
,其中{match_id}
为当前聊天的匹配记录ID。 - 请求头中包含
Authorization: Bearer <JWT_TOKEN>
。
- 前端发送一个
- 后端处理:
-
- Token验证:
-
-
- 验证JWT Token的有效性。
-
-
- 匹配关系验证:
-
-
- 确认请求用户与匹配记录ID对应的用户之间存在有效的匹配关系。
-
-
- 数据查询:
-
-
- 从messages表中查询对应
match_id
的所有聊天记录,按时间排序。
- 从messages表中查询对应
-
- 数据库操作:
-
- 执行
SELECT
语句,获取所有相关的消息记录。
- 执行
- 后端响应:
-
- 返回一个包含聊天记录的JSON数组,每条消息包括发送者ID、接收者ID、消息内容和时间戳。
- 前端展示:
-
- 前端接收响应后,将聊天记录按时间顺序展示在聊天界面,供用户查看历史对话。
4. 评分与评价模块
4.1 提交评分(POST /api/v1/ratings)
交互时序图
前端 (Vue + UniApp) --> 后端 (Spring Boot) --> 数据库 (MySQL)
1. 用户在匹配完成后提交评分
2. 前端发送POST请求至 /api/v1/ratings,携带评分信息
3. 后端验证Token和匹配关系
4. 后端存储评分信息至数据库
5. 后端更新被评分用户的评分数据
6. 后端返回评分成功响应
7. 前端显示评分成功提示
详细流程
- 用户操作:
-
- 用户在打球后,在应用内提交对匹配球友的评分和评价。
- 前端请求:
-
- 前端发送一个
POST
请求至/api/v1/ratings
,请求体包含match_id
、ratee_id
、score
和comment
。 - 请求头中包含
Authorization: Bearer <JWT_TOKEN>
。 - 示例请求体:
- 前端发送一个
{
"match_id": 1001,
"ratee_id": 2,
"score": 5,
"comment": "打球非常愉快,技术不错!"
}
- 后端处理:
-
- Token验证:
-
-
- 验证JWT Token的有效性。
-
-
- 匹配关系验证:
-
-
- 确认用户与
ratee_id
之间存在已完成的匹配记录。
- 确认用户与
-
-
- 评分数据校验:
-
-
- 验证评分分数的范围(1-5)。
- 确认同一匹配记录下用户只能评分一次。
-
-
- 存储评分信息:
-
-
- 将评分信息存储到ratings表中,包括评分者ID、被评分者ID、分数、评论和时间戳。
-
-
- 更新用户评分:
-
-
- 计算被评分用户的平均评分,并更新users表中的评分相关字段(如
average_rating
)。
- 计算被评分用户的平均评分,并更新users表中的评分相关字段(如
-
- 数据库操作:
-
- 执行
INSERT
语句,将评分记录写入ratings表。 - 执行
UPDATE
语句,更新被评分用户的评分数据。
- 执行
- 后端响应:
-
- 返回一个成功消息,确认评分已提交。
- 前端反馈:
-
- 前端接收响应后,显示评分成功提示,并可能更新被评分用户的评分显示。
4.2 获取评分详情(GET /api/v1/ratings/{match_id})
交互时序图
前端 (Vue + UniApp) --> 后端 (Spring Boot)
1. 用户查看特定匹配记录的评分详情
2. 前端发送GET请求至 /api/v1/ratings/{match_id},携带JWT Token
3. 后端验证Token和匹配关系
4. 后端查询数据库获取评分详情
5. 后端返回评分详情信息
6. 前端展示评分详情
详细流程
- 用户操作:
-
- 用户在匹配详情页面查看双方的评分和评价。
- 前端请求:
-
- 前端发送一个
GET
请求至/api/v1/ratings/{match_id}
,其中{match_id}
为特定匹配记录的ID。 - 请求头中包含
Authorization: Bearer <JWT_TOKEN>
。
- 前端发送一个
- 后端处理:
-
- Token验证:
-
-
- 验证JWT Token的有效性。
-
-
- 匹配关系验证:
-
-
- 确认请求用户与匹配记录ID对应的用户之间存在有效的匹配关系。
-
-
- 数据查询:
-
-
- 从ratings表中查询对应
match_id
的所有评分记录。
- 从ratings表中查询对应
-
- 数据库操作:
-
- 执行
SELECT
语句,获取所有相关的评分记录。
- 执行
- 后端响应:
-
- 返回一个包含评分详情的JSON数组,每条评分记录包括评分者ID、被评分者ID、分数、评论和时间戳。
- 前端展示:
-
- 前端接收响应后,将评分详情展示在匹配详情页面,供用户查看双方的评分和评价。
5. 优惠券与奖励模块
5.1 获取用户优惠券(GET /api/v1/coupons)
交互时序图
前端 (Vue + UniApp) --> 后端 (Spring Boot)
1. 用户在优惠券页面查看可用优惠券
2. 前端发送GET请求至 /api/v1/coupons,携带JWT Token
3. 后端验证Token
4. 后端查询数据库获取用户优惠券
5. 后端返回优惠券信息
6. 前端展示优惠券列表
详细流程
- 用户操作:
-
- 用户在应用内进入优惠券页面,查看可用的优惠券。
- 前端请求:
-
- 前端发送一个
GET
请求至/api/v1/coupons
。 - 请求头中包含
Authorization: Bearer <JWT_TOKEN>
。
- 前端发送一个
- 后端处理:
-
- Token验证:
-
-
- 验证JWT Token的有效性。
-
-
- 数据查询:
-
-
- 从coupons表中查询当前用户的所有优惠券,筛选出未使用且未过期的优惠券。
-
- 数据库操作:
-
- 执行
SELECT
语句,获取用户的优惠券数据。
- 执行
- 后端响应:
-
- 返回一个包含优惠券信息的JSON数组,每张优惠券包括ID、代码、类型、折扣金额、使用状态和过期时间。
- 前端展示:
-
- 前端接收响应后,将优惠券列表展示在优惠券页面,供用户查看和使用。
5.2 领取优惠券(POST /api/v1/coupons/claim)
交互时序图
前端 (Vue + UniApp) --> 后端 (Spring Boot) --> 数据库 (MySQL)
1. 用户点击领取某张优惠券
2. 前端发送POST请求至 /api/v1/coupons/claim,携带优惠券ID
3. 后端验证Token和优惠券有效性
4. 后端更新优惠券状态为已领取
5. 后端返回领取成功响应及优惠券码
6. 前端显示领取成功提示,并更新优惠券列表
详细流程
- 用户操作:
-
- 用户在优惠券页面点击“领取”按钮,选择领取某张优惠券。
- 前端请求:
-
- 前端发送一个
POST
请求至/api/v1/coupons/claim
,请求体包含coupon_id
。 - 请求头中包含
Authorization: Bearer <JWT_TOKEN>
。 - 示例请求体:
- 前端发送一个
{
"coupon_id": 5001
}
- 后端处理:
-
- Token验证:
-
-
- 验证JWT Token的有效性。
-
-
- 优惠券有效性验证:
-
-
- 查询coupons表,确认优惠券ID存在且属于当前用户。
- 检查优惠券是否已被领取或已过期。
-
-
- 更新优惠券状态:
-
-
- 将优惠券的
is_used
字段更新为true
,并记录领取时间。
- 将优惠券的
-
-
- 生成优惠券码(若未生成):
-
-
- 若优惠券码尚未生成,后端生成唯一的优惠券码,并存储在
code
字段中。
- 若优惠券码尚未生成,后端生成唯一的优惠券码,并存储在
-
- 数据库操作:
-
- 执行
UPDATE
语句,更新优惠券状态及生成优惠券码。
- 执行
- 后端响应:
-
- 返回一个成功消息及优惠券码。
- 前端反馈:
-
- 前端接收响应后,显示领取成功提示,并在优惠券列表中更新该优惠券的状态为已领取。
6. 积分管理模块
6.1 获取用户积分(GET /api/v1/points)
交互时序图
前端 (Vue + UniApp) --> 后端 (Spring Boot)
1. 用户在积分页面查看当前积分及积分历史
2. 前端发送GET请求至 /api/v1/points,携带JWT Token
3. 后端验证Token
4. 后端查询数据库获取用户积分信息
5. 后端返回积分数据
6. 前端展示积分和积分历史
详细流程
- 用户操作:
-
- 用户在积分页面查看自己的当前积分及积分获取和使用历史。
- 前端请求:
-
- 前端发送一个
GET
请求至/api/v1/points
。 - 请求头中包含
Authorization: Bearer <JWT_TOKEN>
。
- 前端发送一个
- 后端处理:
-
- Token验证:
-
-
- 验证JWT Token的有效性。
-
-
- 数据查询:
-
-
- 从points表中查询当前用户的积分总数及积分历史记录。
-
- 数据库操作:
-
- 执行
SELECT
语句,获取用户的积分总数和历史记录。
- 执行
- 后端响应:
-
- 返回一个包含积分总数和积分历史的JSON对象。
- 前端展示:
-
- 前端接收响应后,将当前积分展示在积分页面,并以列表形式展示积分历史记录。
7. 管理后台模块(可选)
7.1 获取所有用户(GET /api/v1/admin/users)
交互时序图
前端 (管理后台界面) --> 后端 (Spring Boot)
1. 管理员在后台管理页面请求用户列表
2. 前端发送GET请求至 /api/v1/admin/users,携带管理员JWT Token
3. 后端验证Token及管理员权限
4. 后端查询数据库获取所有用户信息
5. 后端返回用户列表
6. 前端展示用户列表
详细流程
- 管理员操作:
-
- 管理员在管理后台界面点击“用户管理”查看所有注册用户。
- 前端请求:
-
- 前端发送一个
GET
请求至/api/v1/admin/users
。 - 请求头中包含
Authorization: Bearer <ADMIN_JWT_TOKEN>
。
- 前端发送一个
- 后端处理:
-
- Token验证:
-
-
- 验证JWT Token的有效性。
-
-
- 权限检查:
-
-
- 确认当前用户拥有管理员权限。
-
-
- 数据查询:
-
-
- 从users表中查询所有用户的基本信息。
-
- 数据库操作:
-
- 执行
SELECT
语句,获取所有用户的数据。
- 执行
- 后端响应:
-
- 返回一个包含所有用户信息的JSON数组。
- 前端展示:
-
- 前端接收响应后,将用户列表展示在管理后台的用户管理页面,供管理员查看和管理。
7.2 统计报表(GET /api/v1/admin/statistics)
交互时序图
前端 (管理后台界面) --> 后端 (Spring Boot)
1. 管理员在后台管理页面请求统计数据
2. 前端发送GET请求至 /api/v1/admin/statistics,携带管理员JWT Token
3. 后端验证Token及管理员权限
4. 后端汇总统计数据
5. 后端返回统计报表
6. 前端展示统计报表
详细流程
- 管理员操作:
-
- 管理员在管理后台界面点击“统计报表”查看平台的各项统计数据。
- 前端请求:
-
- 前端发送一个
GET
请求至/api/v1/admin/statistics
。 - 请求头中包含
Authorization: Bearer <ADMIN_JWT_TOKEN>
。
- 前端发送一个
- 后端处理:
-
- Token验证:
-
-
- 验证JWT Token的有效性。
-
-
- 权限检查:
-
-
- 确认当前用户拥有管理员权限。
-
-
- 数据汇总:
-
-
- 从users、matches、ratings等表中汇总所需的统计数据,如总用户数、总匹配数、活跃用户数、平均评分等。
-
- 数据库操作:
-
- 执行多个
SELECT
语句,或使用聚合函数(如COUNT
、AVG
)获取统计数据。
- 执行多个
- 后端响应:
-
- 返回一个包含各项统计数据的JSON对象。
- 前端展示:
-
- 前端接收响应后,将统计数据以图表或数据卡片形式展示在管理后台的统计报表页面,供管理员分析平台运营情况。
8. API 安全性与错误处理
8.1 认证与授权
- JWT(JSON Web Token):
-
- 所有需要身份验证的API请求必须携带有效的JWT Token。
- Token包含用户ID和角色信息(普通用户或管理员)。
- 后端使用Spring Security进行Token的解析和验证。
- 权限控制:
-
- 基于用户角色(普通用户、管理员)控制API的访问权限。
- 普通用户只能访问自己的数据,管理员拥有更高权限访问所有数据。
8.2 输入验证
- 数据校验:
-
- 后端对所有API的输入参数进行严格的格式和内容校验,使用Hibernate Validator或自定义验证注解。
- 防止SQL注入、跨站脚本(XSS)等攻击。
- 错误响应:
-
- 对于验证失败或权限不足的请求,后端返回适当的错误码和错误信息(如400 Bad Request, 401 Unauthorized, 403 Forbidden)。
8.3 加密与传输
- 密码加密:
-
- 使用bcrypt算法对用户密码进行哈希加密,确保密码安全存储。
- HTTPS:
-
- 所有API通信通过HTTPS协议进行,加密传输数据,防止中间人攻击。
8.4 防护措施
- API速率限制:
-
- 对关键API(如登录、注册)设置请求频率限制,防止暴力破解和DDoS攻击。
- CSRF防护:
-
- 使用CSRF Token机制,防止跨站请求伪造攻击。
- 日志与监控:
-
- 记录所有API请求和异常日志,使用监控工具(如ELK Stack)实时监控系统状态,及时发现和响应异常行为。
8.5 错误处理示例
注册失败示例
- 原因:用户名已存在
- 后端响应:
{
"error": "用户名已存在,请选择其他用户名。"
}
- HTTP 状态码:400 Bad Request
未授权访问示例
- 原因:缺少或无效的Token
- 后端响应:
{
"error": "未授权的访问,请重新登录。"
}
- HTTP 状态码:401 Unauthorized
权限不足示例
- 原因:普通用户尝试访问管理员API
- 后端响应:
{
"error": "您没有权限执行此操作。"
}
- HTTP 状态码:403 Forbidden
9. 前后端交互流程示例
9.1 用户注册与登录流程
- 注册:
-
- 用户在前端填写注册信息并提交。
- 前端发送
POST /api/v1/auth/register
请求。 - 后端处理注册,存储用户信息,返回成功响应。
- 前端提示注册成功,引导用户登录。
- 登录:
-
- 用户在前端输入用户名和密码并提交。
- 前端发送
POST /api/v1/auth/login
请求。 - 后端验证凭证,生成JWT Token,返回用户信息和Token。
- 前端存储Token,设置用户登录状态,跳转至首页。
9.2 匹配与聊天流程
- 匹配:
-
- 用户在匹配页面设置条件并请求匹配。
- 前端发送
GET /api/v1/matches
请求。 - 后端执行匹配算法,返回匹配结果。
- 前端展示匹配结果,用户选择接受匹配。
- 创建匹配记录:
-
- 用户接受匹配,前端发送
POST /api/v1/matches
请求。 - 后端创建匹配记录,返回成功响应。
- 前端更新匹配历史,进入聊天页面。
- 用户接受匹配,前端发送
- 聊天:
-
- 用户在聊天页面发送消息,前端发送
POST /api/v1/messages
请求。 - 后端存储消息并通过WebSocket推送给接收者。
- 接收者前端通过WebSocket接收并展示新消息。
- 用户在聊天页面发送消息,前端发送
9.3 提交评分流程
- 评分:
-
- 用户在匹配完成后进入评分页面,提交对匹配球友的评分和评论。
- 前端发送
POST /api/v1/ratings
请求。 - 后端存储评分信息,更新被评分用户的评分数据,返回成功响应。
- 前端显示评分成功提示,更新用户评分展示。