重置密码

209 阅读1分钟

一 获取参数

HaecMap param = reqData.getParam(); 我这是这样获取

第二 判断密码规则

/**
 * 检查密码是否符合规则,
 *1.密码长度至少8位以上<br/>
 *2.密码应至少包含大写字母,小写字母,数字,特殊符号中的三项<br/>
 *3.禁止使用相同的数字或字符作为密码,如111111,aaaaaa等<br/>
 *4.禁止使用连续升序或降序的数字或字母作为密码,如123456,abcdef等<br/>
 * true检验合格
 * false检验不合格
 */
public static boolean checkPwd(String password) {
    //数字
    String REG_NUMBER = ".*\d+.*";
    //小写字母
    String REG_UPPERCASE = ".*[A-Z]+.*";
    //大写字母
    String REG_LOWERCASE = ".*[a-z]+.*";
    //特殊符号
    String REG_SYMBOL = ".*[~!@#$%^&*()_+|<>,.?/:;'\[\]{}"]+.*";
    //密码为空或者长度小于8位则返回false
    if (password == null || password.length() <8 ) return false;
    int j = 0;
    if (password.matches(REG_NUMBER)) j++;
    if (password.matches(REG_LOWERCASE))j++;
    if (password.matches(REG_UPPERCASE)) j++;
    if (password.matches(REG_SYMBOL)) j++;
    if (j  < 4 )  return false;
    char[] chars = password.toCharArray();
    for (int i = 0; i < chars.length-5 ; i++) {
        int n1 = chars[i];
        int n2 = chars[i + 1];
        int n3 = chars[i + 2];
        int n4 = chars[i + 3];
        int n5 = chars[i + 4];
        int n6 = chars[i + 5];
        // 判断重复字符
        if (n1 == n2 && n1 == n3 && n1 == n4 && n1 == n5 && n1 == n6) {
            return false;
        }
        // 判断连续字符: 正序 + 倒序
        if ((n1 + 1 == n2 && n1 + 2 == n3 && n1 + 3 == n4 && n1 + 4 == n5 && n1 + 5 == n6 ) || (n1 - 1 == n2 && n1 - 2 == n3 && n1 - 3 == n4 && n1 - 4 == n5 && n1 - 5 == n6)) {
            return false;
        }
    }
    return true;
}

//判断新密码是否符合规则

if(StringUtils.checkPwd(param.getString("newPassword"))){
    resData.putHaecMap(Constants.RETURN_KEY,HaecResult.error("密码必须包含大小写特殊字符"));
    return resData.send();
}

//判断密码是否一样

/**
 * 判断密码是否相同
 *
 * @param rawPassword 真实密码
 * @param encodedPassword 加密后字符
 * @return 结果
 */
public static boolean matchesPassword(String rawPassword, String encodedPassword)
{
    BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
    return passwordEncoder.matches(rawPassword, encodedPassword);
}

//传旧密码

if (!SecurityUtils.matchesPassword(param.getString("oldPassword"), password))
{
    resData.putHaecMap(Constants.RETURN_KEY,HaecResult.error("修改密码失败,旧密码错误"));
    return resData.send();
}

//传新密码
if (SecurityUtils.matchesPassword(param.getString("newPassword"), password))
{
    resData.putHaecMap(Constants.RETURN_KEY,HaecResult.error("新密码不能与旧密码相同"));
    return resData.send();
}

第三 更新密码