1.添加校验密码工具类
public class PasswordUtil {
/**
* 校验密码强度 true:通过校验 false:未通过校验
* @param password
* @return
*/
public static boolean checkPassword(String password){
// 密码长度至少为八位,包含大小写字母、特殊字符和数字
String regex = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[~!@#$%^&*()/*-+.?])(?=\\S+$).{8,20}$";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(password);
return matcher.matches();
}
}
2.在登录方法生成token前拦截(可自定义异常),注意提前修改管理员密码或对管理员开启白名单
if (!PasswordUtil.checkPassword(password)) {
throw new CustomException("密码强度不符合要求,存在泄密风险,请联系上级卫健单位重置密码");
}
3.修改前端密码校验正则表达式和提示信息,前端需要修改的地方:用户管理重置密码、个人中心重置密码、首次登录强制修改密码
例如:
const rules = ref({
oldPassword: [{ required: true, message: '旧密码不能为空', trigger: 'blur' }],
newPassword: [
{ required: true, message: '新密码不能为空', trigger: 'blur' },
{
pattern: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[~!@#$%^&*()/*-+.?])(?=\S+$).{8,20}$/,
message: '密码长度八位以上,必须包含大小写+特殊字符+数字',
trigger: 'blur'
}
],
confirmPassword: [
{ required: true, message: '确认密码不能为空', trigger: 'blur' },
{ required: true, validator: equalToPassword, trigger: 'blur' }
]
})
用户管理重置密码时可在设置默认密码
function handleResetPwd(row) {
proxy
.$prompt('请输入"' + row.userName + '"的新1密码', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
closeOnClickModal: false,
inputPattern: /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[~!@#$%^&*()/*-+.?])(?=\S+$).{8,20}$/,
inputErrorMessage: '密码长度八位以上,必须包含大小写+特殊字符+数字',
inputValue: 'Zy12345678!'
})
.then(({ value }) => {
resetUserPwd(row.userId, sm4Encrypt(value)).then((response) => {
proxy.$modal.msgSuccess('修改成功,新密码是:' + value)
})
})
.catch(() => {})
}
具体修改根据各系统实际情况调整。