- 1. 权限模块
- 1.1 注册
- 1.2 登录
本项目是一个校内互动交流平台,主要涉及模块有权限模块、帖子模块、性能模块、通知模块、搜索模块。主要使用的技术有SpringBoot,SpringMVC,MyBatis,MySQL,Redis,Kafka。
权限模块主要实现了注册登录和权限管理等功能。
帖子模块主要实现了发帖,评论和私信等功能。
性能模块使用Redis实现点赞,关注和网站数据统计等功能。
通知模块使用Kafka实现系统通知功能。
搜索模块使用Elasticsearch实现帖子搜索功能
输入账户,密码,确认密码,邮箱,点击注册按钮。根据 /register(post)传入User。调用 userService.register 方法。
userService.register 方法首先根据用户名和邮箱查询数据库看是否已经存在,如果存在,返回错误信息。如果不存在,对User加入 Salt 属性,即五位随机字符串,为了和密码拼接后进行md5加密。将加密后的密码存入数据库。分别设置Type,Status为0(Type 0普通用户 1管理员 2版主;Status 0未激活 1已激活)。设置随机字符串激活码。设置用户头像和创建时间。将User插入数据库。
使用JavaMailSender发送激活邮件。将可能带有错误信息的Map返回。
LoginController 层得到 Map 判断是否为空,为空则注册成功,返回 /site/operate-result 页面。否则返回 /site/register 页面,并将错误信息加入model中。
在邮箱中点击激活链接,调用LoginController层的 /activation/{userId}/{code} 。调用userService.activation(userId, code)方法。首先判断 User 中的status是否已经等于1,已经等于1返回 重复激活 信息。然后判断 User 中的激活码是否与code相等,等则设置status为1,返回激活成功。不等返回激活失败。
1.2 登录首先在首页点击登录或者在其他页面转入登录页面时,验证码路径访问 “/kaptcha” 。
在 LoginController 层中根据 KaptchaConfig 配置类中的 kaptchaProducer (google提供)来生成验证码文本和图像, 生成随机字符串作为Redis中验证码的key,将key放在cookie中通过response传给浏览器。然后利用key将验证码文本存入Redis,设置失效时间为60s。为了判断用户在登录时传入的code是否等于该文本。
再通过response将图像返回给浏览器。
在登录页面输入用户名,密码,验证码和是否勾选“记住我”。将对应的username,password,code,rememberme通过 “/login” 传入 login 方法。
Llogin方法在参数中使用 @CookieValue 注解从cookie中取出Redis中验证码文本的key,判断一下key是否为空,不为空则取出Redis中的验证码文本判断是否和code相等,不等返回Map。然后根据remember选取登录凭证超时时间。然后将username,password 和超时时间 传入给userService.login 方法。
userService.login 方法拿到 三个值先判空,空则返回Map。然后根据username查询数据库看账号是否存在。然后查询status看账户是否已经激活。最后验证密码(调取salt和password拼接后使用md5加密再和数据库中密码比对)。然后生成登录凭证,见LoginTicket,将登陆凭证放入Redis,key为随机字符串Ticket字段。将凭证放入Map并返回给 LoginController 层。
LoginController 层拿到Map。查看其中是否有凭证,有将凭证放入cookie,设置过期时间,返回给浏览器,重定向转入index。无则将Map中报错信息加入model,转入login。