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

项目总结nk

1. 用户注册流程

注册逻辑(UserService.register 方法)
  1. 参数校验

    • 检查用户输入的用户名、密码和邮箱是否为空。如果为空,返回相应的错误信息。

    • 检查用户名和邮箱是否已经被注册。如果已被注册,返回相应的错误信息。

  2. 用户信息初始化

    • 生成一个随机的 salt(盐值),用于加密密码。

    • 使用 CommunityUtil.md5 方法对密码进行加密(密码 + salt)。

    • 设置用户的默认属性:

      • type:用户类型(普通用户为 0)。

      • status:用户状态(未激活为 0)。

      • activationCode:生成一个随机的激活码。

      • headerUrl:设置用户头像的默认 URL。

      • createTime:设置用户的注册时间。

  3. 插入用户数据

    • 将用户信息插入数据库(userMapper.insertUser)。

  4. 发送激活邮件

    • 使用 Thymeleaf 模板引擎生成激活邮件的内容。

    • 构造激活链接,格式为:http://域名/contextPath/activation/用户ID/激活码

    • 通过 mailClient.sendMail 方法发送激活邮件到用户的邮箱。


2. 邮箱激活流程

激活逻辑(UserService.activation 方法)
  1. 查询用户

    • 根据 userId 从数据库中查询用户信息。

  2. 检查用户状态

    • 如果用户状态已经是激活状态(status == 1),返回 ACTIVATION_REPEAT,表示重复激活。

    • 如果用户提供的激活码与数据库中的激活码匹配,执行激活操作:

      • 更新用户状态为已激活(status = 1)。

      • 清除用户缓存(clearCache(userId)),确保缓存数据与数据库一致。

      • 返回 ACTIVATION_SUCCESS,表示激活成功。

    • 如果激活码不匹配,返回 ACTIVATION_FAILURE,表示激活失败。

7. 示例激活码生成与验证流程

  1. 用户注册

    • 用户填写注册表单,提交用户名、密码和邮箱。

    • 系统生成激活码 550e8400e29b41d4a716446655440000,并将其与用户信息一起存储。

  2. 发送激活邮件

    • 系统生成激活链接:

      复制

      http://localhost:8080/community/activation/101/550e8400e29b41d4a716446655440000
    • 将链接嵌入邮件内容,发送到用户的邮箱。

  3. 用户点击激活链接

    • 用户点击邮件中的链接,浏览器访问激活 URL。

  4. 系统验证激活码

    • 系统解析 URL 中的 userId=101 和 activationCode=550e8400e29b41d4a716446655440000

    • 查询用户信息,检查激活码是否匹配。

    • 如果匹配,激活用户账号;否则,返回错误信息。

1. 验证码生成

生成验证码文本和图片

  1. 验证码文本:随机生成的字符串,例如 A1B2C3

  2. 验证码图片:根据文本生成的图像,用户需要识别并输入。

  3. 验证码存储

    • 将验证码文本存入 Redis,key 为 kaptchaOwner(一个随机生成的 UUID)。

    • 将 kaptchaOwner 存入 Cookie,用于后续验证时从 Redis 中获取验证码文本。

  4. 验证码有效期:验证码在 Redis 中存储 60 秒,过期后需要重新生成。

2. 验证码验证

用户登录时验证验证码
  • 用户在登录页面输入用户名、密码和验证码。

  • 系统从 Cookie 中获取 kaptchaOwner,然后从 Redis 中获取对应的验证码文本。

  • 系统比较用户输入的验证码和 Redis 中存储的验证码文本,如果一致,则验证通过;否则,返回错误信息。

1. 登录状态检查

  • 如果没有使用 Spring Security,可以通过检查 HttpSession 或 Cookie 中的登录凭证(如 ticket)来判断用户是否登录。

  • 在你的代码中,登录凭证(ticket)存储在 Cookie 中,登录状态通过 UserService.findLoginTicket(ticket) 方法验证。


2. 为游客和已登录用户展示不同界面

2.1 在控制器中检查登录状态
  • 在控制器方法中,通过检查当前用户的登录状态,决定返回不同的视图或数据。

相关文章:

  • Android ObjectBox数据库使用与集成指南
  • Doris系列之基础使用
  • Magma:多模态 AI 智体的基础模型
  • DeepSeek 助力 Vue3 开发:打造丝滑的下拉选择框(Dropdown Select)
  • 数据结构——基于单链表创建通讯录
  • LangChain教程 - RAG - PDF问答
  • HarmonyOS+Django实现图片上传
  • AVFormatContext
  • Node.js v16 版本安装
  • 排序(数据结构篇)
  • YOLOv12 ——基于卷积神经网络的快速推理速度与注意力机制带来的增强性能结合
  • 百度觉醒,李彦宏渴望光荣
  • 浅析 Redis 分片集群 Cluster 原理、手动搭建、动态伸缩集群、故障转移
  • 《Spring Boot + MySQL高性能应用实战:性能优化技巧与最佳实践》
  • CMake小结2(PICO为例)
  • 【目标检测旋转框xml2txt】rolabelimg标注的xml格式label转YOLO格式txt文件
  • 【Java项目】基于Spring Boot的旅游管理系统
  • Blueprint —— Events
  • vue3-07模拟vue3的响应式原理Proxy (代理对象)与Reflect (反射对象)
  • NNP_test_cpp
  • 美国务院批准向土耳其出售导弹及相关部件,价值3.04亿美元
  • 秘鲁总理辞职
  • 第1现场 | 美国称将取消制裁,对叙利亚意味着什么
  • MSCI中国指数5月调整:新增5只A股、1只港股
  • 新能源汽车,告别混乱创新
  • 北斗专访|特赞科技范凌:现在AI主要是“说话”,接下来要“干活”了