实现登录功能

1、数据库设计
2、明文密码两次MD5处理
3、JSR303参数检验+全局异常处理器
4、分布式Session

【数据库设计】

java 多次登录失败锁定 java三次登录_数据库设计


【两次MD5】

第一次是把用户传入的密码进行加密,http协议在网络中传输的是明文,为了防止密码别截取,进行加密处理,再把处理过后的密码传给服务端。

第二次是服务端接受到的密码和生成的随机salt结合,进行一次MD5处理,再写入数据库。如果数据库泄露,那么可以根据MDS值反推出用户的密码,所以双重加密确保安全。(1)添加依赖:

java 多次登录失败锁定 java三次登录_java 多次登录失败锁定_02


(2)第一次加密:

java 多次登录失败锁定 java三次登录_java_03


这样的加密方式并不是绝对的安全,因为salt值页面写的,如果被获取页面代码,也会存在泄漏密码的风险。

所以接下来第二次加密,随机生成的salt值,把密码和salt值都存入数据库。

(3)第二次加密:

java 多次登录失败锁定 java三次登录_数据库设计_04


java 多次登录失败锁定 java三次登录_数据库_05


来看一下两次加密运行结果:

java 多次登录失败锁定 java三次登录_数据库_06


可以看到第一次的运行结果可以根据固定的salt值推出明文密码,二次加密后就算数据库泄露,也只能获得第一次加密后的密码。

结合一下两次加密:

java 多次登录失败锁定 java三次登录_数据库_07


【实现登录功能】

java 多次登录失败锁定 java三次登录_java_08


/to_login跳转到登录页面,https://github.com/yqq98/seckill/blob/develop/src/main/resources/templates/login.html,页面实现代码。

java 多次登录失败锁定 java三次登录_java_09


登录之后出现错误

java 多次登录失败锁定 java三次登录_数据库_10


是json页面没有响应,漏了个@ResponseBody,添加进去运行结果:

java 多次登录失败锁定 java三次登录_数据库_11


就说明我们登录成功了 。那么只是简单的登录,还没有校验,接下来就是对账号和密码的校验。

java 多次登录失败锁定 java三次登录_java_12


其中ValidatorUtil类是号码格式类,判断手机号码是否是十一位数

java 多次登录失败锁定 java三次登录_数据库_13


要实现登录,那我们就要创建用户对象,创建MiaoshaUser.java获取参数;接口MiaoshaUserDao具体的ql语句;MiaoshaUserService.java注入do层

java 多次登录失败锁定 java三次登录_数据库设计_14


java 多次登录失败锁定 java三次登录_数据库_15