问题:员工表中的密码是明文存储,安全性太低。
解决思路:
-
将密码加密后存储,提高安全性
-
使用MD5加密方式对明文密码加密
实现步骤:
-
修改数据库中明文密码,改为MD5加密后的密文
打开employee表,修改密码
2.修改Java代码,前端提交的密码进行MD5加密后再跟数据库中密码比对
打开EmployeeServiceImpl.java,修改比对密码
/**
* 员工登录
*
* @param employeeLoginDTO
* @return
*/
public Employee login(EmployeeLoginDTO employeeLoginDTO) {//1、根据用户名查询数据库中的数据
//2、处理各种异常情况(用户名不存在、密码不对、账号被锁定)
//.......
//密码比对
// TODO 后期需要进行md5加密,然后再进行比对
password = DigestUtils.md5DigestAsHex(password.getBytes());
if (!password.equals(employee.getPassword())) {
//密码错误
throw new PasswordErrorException(MessageConstant.PASSWORD_ERROR);
}//........
//3、返回实体对象
return employee;
}
我们先不修改java代码的情况下 看看能不能登录成功
前端传入进来的数据已经封装到
employeeLoginDTO
然后调用employeeService里面的login()方法
所以我们要进入到login()方法里面
这个时候密码匹配不上 因为从数据库上来的密码和前端传递过来的密码不一样
比对不上 这个时候就会抛出异常
一抛异常 就会执行 我们的全局的异常处理器 全局的异常处理器就会捕获到我们的异常
为什么这边显示的是密码错误 的一个Message
是因为我们new 一个异常new PasswordErrorException
同时把PASSWORD_ERROR给传进来
而这个PASSWORD_ERROR是怎么来的呢
是因为我们定义了一个消息常量类
我们项目当中给前端的提示信息 都通过常量类里面的一个一个常量 来定义的
所以这边一抛出一个异常 全局处理器去捕获异常
所以我们要改造一个java代码
进行MD5加密
把前端传递过来的明文密码(123456)进行MD5加密处理
处理之后在根数据库中的密文进行对比
用工具类DigestUtils中的方法md5DigestAsHex()
把明文密码 也就是password传入进来 并且要转成一个Byte数组 所以要password.getBytes()
//密码比对 // 对前端传递过来的明文密码进行md5加密处理 password = DigestUtils.md5DigestAsHex(password.getBytes());
if没有成立 说明密码是一样的