加密工具实现
加密是当处理用户信息时要采取的手段,在后端中不应该以名文的形式存储用户的隐私数据,目前主流的几种加密方法介绍:
对称加密:对称加密是通过密钥的方式进行加密,缺点是如果获取到密钥就可以通过密钥进行解密.
哈希加密:哈希加密是一种单向加密算法,它将任意长度的输入数据通过哈希函数转换为固定长度的哈希值(也称为摘要).哈希加密的特点是不可逆,即无法从哈希值反推出原始数据,因此常用于密码存储、数据完整性校验等场景.单纯使用哈希加密存储密码仍存在被暴力破解或彩虹表攻击的风险.
彩虹表攻击是因为哈希算法是有规律的,可以穷举一张表,然后对其暴力破解.
加盐哈希:先生成一段随机的字符串,也就是盐,再将盐和明文进行拼接,对盐和拼接字符进行哈希加密,最后分别进行存储.
在本次项目中,主要是将用户的手机号和密码进行加密,对于手机号,由于可能需要将用户的手机号从数据库中取出进行发送中奖通知,所以采用对称加密,对于密码只是再登入时需要,我们可以将用户登录时传入的密码进行哈希加密,再从数据库中看看是不是两者一致,就可以判断.
这次使用的加密工具是Hutool,使用时将依赖导入
<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.8.40</version> </dependency>注册功能
注册的时序图
首先是传入的参数,因为包含电话号码等信息,所以后端干脆创建一个对象来接收
在controller层,其中的UserRegisterDTO表示将service向上传输的数据进行包装,来统一返回的格式,此时将信息对象传输到userService层进行信息的校验,最后返回.
信息校验
进入service层,先是进行信息校验checkRegisterInfo,在经过check没问题后,代表传入的数据格式没问题,此时就可以构造私密数据进行存储,由userMapper进行数据的插入,注意这里的userDO表示数据层向上传输的格式.
数据格式检查
1.在检查格式时,创建一个RegexUtil的工具类来进行检查.
2.在检查手机号和密码的使用情况时,创建两个检查方法,传入密码和手机号到dao层,再数据库中寻找.
数据层实现
在数据层,采用Mybites来完成数据库和程序的交互.
最后完成注册前端就完成了注册功能.
EncryptTypeHandler介绍
我们对⼿机号进⾏存储时,要先将⼿机号加密,如果要拿出使⽤时,还要进⾏⼀次解密操作。为了不让每次⼿动去加密解密,决定使⽤Mybatis的TypeHandler来解决.
简单理解就是当处理某些特定字段时,我们可以实现⼀些⽅法,让Mybatis遇到这些特定字段可以⾃动运⾏处理。
我们只需要在配置文件中指定一下对应得路径.
登录功能
这里使用密码登录,验证码登录功能因为阿里短信服务近两年不允许个人使用短信服务而取消.
密码登录的时序图:
Controller层
前端发送的只有手机号和密码,依旧创建一个param来接收.
service层
传入service层进行判断
登录拦截器
添加拦截器来防止用户没登录的情况下的非法访问.