项目总结nk
1. 用户注册流程
注册逻辑(UserService.register
方法)
-
参数校验:
-
检查用户输入的用户名、密码和邮箱是否为空。如果为空,返回相应的错误信息。
-
检查用户名和邮箱是否已经被注册。如果已被注册,返回相应的错误信息。
-
-
用户信息初始化:
-
生成一个随机的
salt
(盐值),用于加密密码。 -
使用
CommunityUtil.md5
方法对密码进行加密(密码 + salt
)。 -
设置用户的默认属性:
-
type
:用户类型(普通用户为 0)。 -
status
:用户状态(未激活为 0)。 -
activationCode
:生成一个随机的激活码。 -
headerUrl
:设置用户头像的默认 URL。 -
createTime
:设置用户的注册时间。
-
-
-
插入用户数据:
-
将用户信息插入数据库(
userMapper.insertUser
)。
-
-
发送激活邮件:
-
使用 Thymeleaf 模板引擎生成激活邮件的内容。
-
构造激活链接,格式为:
http://域名/contextPath/activation/用户ID/激活码
。 -
通过
mailClient.sendMail
方法发送激活邮件到用户的邮箱。
-
2. 邮箱激活流程
激活逻辑(UserService.activation
方法)
-
查询用户:
-
根据
userId
从数据库中查询用户信息。
-
-
检查用户状态:
-
如果用户状态已经是激活状态(
status == 1
),返回ACTIVATION_REPEAT
,表示重复激活。 -
如果用户提供的激活码与数据库中的激活码匹配,执行激活操作:
-
更新用户状态为已激活(
status = 1
)。 -
清除用户缓存(
clearCache(userId)
),确保缓存数据与数据库一致。 -
返回
ACTIVATION_SUCCESS
,表示激活成功。
-
-
如果激活码不匹配,返回
ACTIVATION_FAILURE
,表示激活失败。
-
7. 示例激活码生成与验证流程
-
用户注册:
-
用户填写注册表单,提交用户名、密码和邮箱。
-
系统生成激活码
550e8400e29b41d4a716446655440000
,并将其与用户信息一起存储。
-
-
发送激活邮件:
-
系统生成激活链接:
复制
http://localhost:8080/community/activation/101/550e8400e29b41d4a716446655440000
-
将链接嵌入邮件内容,发送到用户的邮箱。
-
-
用户点击激活链接:
-
用户点击邮件中的链接,浏览器访问激活 URL。
-
-
系统验证激活码:
-
系统解析 URL 中的
userId=101
和activationCode=550e8400e29b41d4a716446655440000
。 -
查询用户信息,检查激活码是否匹配。
-
如果匹配,激活用户账号;否则,返回错误信息。
-
1. 验证码生成
生成验证码文本和图片
-
验证码文本:随机生成的字符串,例如
A1B2C3
。 -
验证码图片:根据文本生成的图像,用户需要识别并输入。
-
验证码存储:
-
将验证码文本存入 Redis,key 为
kaptchaOwner
(一个随机生成的 UUID)。 -
将
kaptchaOwner
存入 Cookie,用于后续验证时从 Redis 中获取验证码文本。
-
-
验证码有效期:验证码在 Redis 中存储 60 秒,过期后需要重新生成。
2. 验证码验证
用户登录时验证验证码
-
用户在登录页面输入用户名、密码和验证码。
-
系统从 Cookie 中获取
kaptchaOwner
,然后从 Redis 中获取对应的验证码文本。 -
系统比较用户输入的验证码和 Redis 中存储的验证码文本,如果一致,则验证通过;否则,返回错误信息。
1. 登录状态检查
-
如果没有使用 Spring Security,可以通过检查
HttpSession
或Cookie
中的登录凭证(如ticket
)来判断用户是否登录。 -
在你的代码中,登录凭证(
ticket
)存储在 Cookie 中,登录状态通过UserService.findLoginTicket(ticket)
方法验证。
2. 为游客和已登录用户展示不同界面
2.1 在控制器中检查登录状态
-
在控制器方法中,通过检查当前用户的登录状态,决定返回不同的视图或数据。