MD5的pom
-
- <dependency>
- <groupId>commons-codecgroupId>
- <artifactId>commons-codecartifactId>
- dependency>
需求分析
- 注册用户时,注册的密码在数据库中进行加密
- 登入用户时,采用MD5验证后密码正确登录用户
需求解决
- 数据库建表时,在user表中设置一个slat列,每一次注册用户时,生成一个独一无二的slat(盐)写入数据库slat列,并使用md5+slat的方式进行密码加密,写入数据库password列。
- 登录用户时,先根据userid获得slat,输入密码和md5+slat加密之后得到的password和数据库password对比,相同,则登入成功。
注册用户代码
1.生成slat的工具类(自己随便写的,保证生成的数字不一样就行)
- public class SlatUtile {
- public static Integer createSlat(){
- int i = new Random().nextInt();
- return i;
- }
- }
2.注册用户mapper
- @Repository
- public interface AddUserMapper {
- @Insert("insert into user(userid,username,phonenumber,password,slat)value(#{userid},#{username},#{phonenumber},#{password},#{slat})")
- Integer addUser(Integer userid, String username,String phonenumber,String password,Integer slat);
- }
3.注册用户service
- //service接口
- public interface AddUserService {
- Integer addUser(Integer userid, String username,String phonenumber,String password,Integer slat);
- }
- @Service
- public class AddUserServiceImp implements AddUserService {
-
- @Autowired
- private AddUserMapper addUserMapper;
-
- //注册新用户,密码进行采用MD5+盐加密
- @Override
- public Integer addUser(Integer userid,String username,String phonenumber,String password,Integer slat) {
-
- Integer slatforthis = SlatUtile.createSlat(); //每次用户注册新生成一个salt
- String md5password = DigestUtils.md5Hex(password+slatforthis); //对密码进行加密
-
- Integer integer = addUserMapper.addUser(userid, username, phonenumber, md5password,slatforthis);
- return integer;
- }
- }
4.注册用户controller
- @RestController
- public class AddUserController {
-
- @Autowired
- private AddUserService addUserService;
-
- @RequestMapping("adduser")
- public String adduser(Integer userid, String username, String phonenumber, String password,Integer slat) {
- Integer integer = addUserService.addUser(userid, username, phonenumber, password,slat);
- if (integer == 1){
- return "新建用户完成";
- }else {
- return "新建用户失败";
- }
- }
- }
5.测试

注册密码为111

数据库密码完成加密,如图所示
登录用户代码
首先需要个根据userid查找user的查找代码,这里我就不写了(为了获取slat)
1.登入用户mapper
- @Repository
- public interface LoginMapper {
- @Select("select * from user where userid = #{userid} and password = #{password}")
- UserVO login(Integer userid,String password);
- }
2.登入用户service
- //接口层
- public interface Md5LoginService {
- UserVO login(Integer userid, String password);
- }
- @Service
- public class Md5LoginServiceImp implements Md5LoginService {
- @Autowired
- private LoginMapper loginMapper;
- @Autowired
- private FindUserbyIdMapper findUserbyIdMapper;
- @Override
- public UserVO login(Integer userid, String password) {
- UserVO user = findUserbyIdMapper.findUserById(userid); //根据userid查找user
- String salt = user.getSlat(); //获得当前用户的salt
- String md5password = DigestUtils.md5Hex(password + salt); //获得加密密码
- UserVO userVO = loginMapper.login(userid, md5password);
- return userVO;
- }
- }
主要逻辑是如果输入的未加密密码和slat正确,加密后得到的字段和数据库的password字段是相同的
3.登入用户controller
- @RestController
- public class Md5LoginController {
-
- @Autowired
- private Md5LoginService md5LoginService;
-
- @RequestMapping("md5login")
- public UserVO md5login (Integer userid,String password){
- UserVO userVO = md5LoginService.login(userid, password);
- return userVO;
- }
- }
4.验证

登入成功(密码111)
登入失败,未作处理