美文网首页软件测试学习之路
SSM框架新增/修改用户、用户登录时密码加密处理及校验

SSM框架新增/修改用户、用户登录时密码加密处理及校验

作者: 乘风破浪的姐姐 | 来源:发表于2018-05-04 14:07 被阅读21次

    加密技术Md5Crypt需要在pom文件中导入包:

     <dependency>
          <groupId>commons-codec</groupId>
          <artifactId>commons-codec</artifactId>
          <version>1.10</version>
        </dependency>
    

    一、第一种实现方法
    1)、新增用户时,对新增后的用户密码进行加密
    在userService.class中实现如下:

     public int adduser(User user) {
           user.setUserid(UUID.randomUUID().toString());
           user.setPassword(Md5Crypt.md5Crypt(user.getPassword().getBytes()));
            return  userMapper.insert(user);
        }
    

    以上方法同样适用于修改用户密码时。
    2)、使用新增的用户登录系统时,需要校验用户输入的密码与后台存储的密码是否一致
    在loginService.class中实现如下:

     public String checkUser(HttpServletRequest request, User user) {
            UserCriteria example = new UserCriteria();
            String password = user.getPassword();
            example.createCriteria().andUsernameEqualTo(user.getUsername());
            List<User> objs = userMapper.selectByExample(example);
            if(objs.size()>0){
                User user1 = objs.get(0);
                //获取后台的用户密码
                String md5Pass =  MD5CryptUtil.getSalts(user1.getPassword());
                //将用户输入的密码加密
                String pass = Md5Crypt.md5Crypt(password.getBytes(),md5Pass);
                //判断用户输入的密码与后台密码是否一致
                if(!pass.equals(user1.getPassword())){
                    request.setAttribute("error", "密码错误!");
                    return "index";
                }
                    return "main";
                }
    
            }else{
                request.setAttribute("error", "用户不存在!");
                return "index";
            }
        }
    

    其中加密工具类实现如下:

    import org.apache.commons.codec.digest.DigestUtils;
    import org.apache.commons.codec.digest.Md5Crypt;
    
    public class MD5CryptUtil
    {
        public static void main(String[] args) {
            String tt1 = Md5Crypt.md5Crypt("333".getBytes());
            System.out.println("~~~"+tt1);//$1$lYz58EdG$kfqNTaHTCdLaHCm/7fzXA1
            String mysalt = getSalts(tt1);
                    System.out.println("~~~"+mysalt);//$1$lYz58EdG$
            System.out.println("~~~"+Md5Crypt.md5Crypt("333".getBytes(), mysalt));//$1$lYz58EdG$kfqNTaHTCdLaHCm/7fzXA1
        }
    
        public static String getSalts(String password) {
            String[] salts = password.split("\\$");
            if (salts.length < 1) {
                return "";
            }
            String mysalt = "";
            for (int i = 1; i < 3; i++) {
                mysalt += "$" + salts[i];
            }
            mysalt += "$";
            return mysalt;
        }
    }
    

    可以看到,登录时校验密码是否正确,先是取出后台该用户存储的密码,然后截取后台存储密码的$...$这部分。再把Md5Crypt.md5Crypt(用户登录时输入的密码.getBytes(), 截取的后台电部分加密的密码)进行加密,最后比该结果与后台存储的加密密码是否一致,即可校验密码的正确性。

    二、md5加密密码还有一种方法,但是感觉不太安全。
    以下是用户新增时,将用户密码和userid组合起来进行md5加密。
    用户登录时,取登录时输入的密码与后台该用户对应的userid合起来进行md5加密。
    最后比较两者是否一致。
    1)、在userservice中实现

    public int adduser(User user) {
     user.setUserid(UUID.randomUUID().toString());
     user.setPassword(DigestUtils.md5Hex(user.getPassword()+user.getUserid()));
    return  userMapper.insert(user);
    }
    

    2)、在loginservice类中校验

        public String checkUser(HttpServletRequest request, User user) {
            UserCriteria example = new UserCriteria();
            String password = user.getPassword();
            example.createCriteria().andUsernameEqualTo(user.getUsername());
            List<User> objs = userMapper.selectByExample(example);
            if(objs.size()>0){
                User user1 = objs.get(0);
               String pass = DigestUtils.md5Hex(password +user1.getUserid());
                //判断用户输入的密码与后台密码是否一致
                if(!pass.equals(user1.getPassword())){
                    request.setAttribute("error", "密码错误!");
                    return "index";
                }else{
                    request.getSession().setAttribute("user",user1);
                    return "main";
                }
    
            }else{
                request.setAttribute("error", "用户不存在!");
                return "index";
            }
        }
    

    相关文章

      网友评论

        本文标题:SSM框架新增/修改用户、用户登录时密码加密处理及校验

        本文链接:https://www.haomeiwen.com/subject/sndhrftx.html