一 获取参数
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();
}
第三 更新密码