【JAVA】后台管理系统密码复杂度和修改密码处理
一、后台管理系统密码要求
后台管理系统密码要求 |
口令有效期:90天 |
口令长度8位及8位以上 |
口令复杂度要求,至少包含以下四类字符中的三类字符:
|
口令不与前3次重复 |
口令注意事项: (1)禁止使用连续的三个数字或键盘连续的三个字母作为密码的组成部分,如asdf@123、abcd@1234 、qaz@wsx等; (2)禁止使用系统账号、姓名、出生日期的作为密码的组成部分,如:zhangsan@123、admin@123、hhh@2021; (3)避免使用字典口令,包括许多大家习惯性设置的口令,比如常见的字典口令:Qaz@wsx、Admin123、hkcts@123、hhh12345等。 |
二、怎么做
1、密码复杂度
/**
* 校验复杂度
*/
public Boolean checkPWD(String PWD) {
// 规定的正则表达式
// (?![a-zA-Z]+$) 表示 字符串不能完全由大小写字母组成
// (?![A-Z0-9]+$) 表示 字符串不能完全由大写字母和数字组成
// (?![A-Z\W_]+$) 表示 字符串不能完全由大写字母和特殊字符组成
// (?![a-z0-9]+$) 表示 字符串不能完全由小写字母和数字组成
// (?![a-z\W_]+$) 表示 字符串不能完全由小写字母和特殊字符组成
// (?![0-9\W_]+$) 表示 字符串不能完全由数字和特殊字符组成
// [a-zA-Z0-9\W_]{8,} 表示 字符串应该匹配大小写字母、数字和特殊字符,至少匹配8次
String regex = "^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![a-z0-9]+$)(?![A-Z\\W_]+$)(?![a-z\\W_]+$)(?![0-9\\W_]+$)[a-zA-Z0-9\\W_]{8,}$";
return ReUtil.isMatch(regex, PWD);
}
/*** 校验复杂度*/public Boolean checkPWD(String PWD) {// 规定的正则表达式// (?![a-zA-Z]+$) 表示 字符串不能完全由大小写字母组成// (?![A-Z0-9]+$) 表示 字符串不能完全由大写字母和数字组成// (?![A-Z\W_]+$) 表示 字符串不能完全由大写字母和特殊字符组成// (?![a-z0-9]+$) 表示 字符串不能完全由小写字母和数字组成// (?![a-z\W_]+$) 表示 字符串不能完全由小写字母和特殊字符组成// (?![0-9\W_]+$) 表示 字符串不能完全由数字和特殊字符组成// [a-zA-Z0-9\W_]{8,} 表示 字符串应该匹配大小写字母、数字和特殊字符,至少匹配8次String regex = "^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![a-z0-9]+$)(?![A-Z\\W_]+$)(?![a-z\\W_]+$)(?![0-9\\W_]+$)[a-zA-Z0-9\\W_]{8,}$";return ReUtil.isMatch(regex, PWD);}
密码与前三次重复
/*** 校验密码是否和前3次重复*/public Boolean checkRepeatPWD(String pwd,TUser tUser) {List<TUserPasswordLog> list = tUserPasswordLogMapper.selectLimt(tUser.getLoginName());if(CollectionUtils.isNotEmpty(list)) {for (TUserPasswordLog tUserPasswordLog : list) {if(pwd.equals(tUserPasswordLog.getPassword())) {return false;}}}return true;}
@Repository
public interface TUserPasswordLogMapper extends BaseMapper<TUserPasswordLog>{/*** 更新管理员最后登录时间 id,user_name as userName,login_name as loginName, password*/@Select("<script>" +"select * from t_user_password_log WHERE LOGIN_NAME = #{loginName} order by create_time desc limit 3 " +"</script>")public List<TUserPasswordLog> selectLimt(@Param("loginName") String loginName );}
处理校验过程
//校验密码复杂度Boolean checkPWD = tUserService.checkPWD(dto.getNewPassword());if (!checkPWD) {log.error(TUserConstant.PWD_CHECK_ERROR);return ResponseData.error(TUserConstant.PWD_CHECK_ERROR);}//校验是否三次密码重复Boolean checkRepeatPWD = tUserPasswordLogService.checkRepeatPWD(Des3Utils.get3DESEncryptECB(dto.getNewPassword(), AES_KEY), tUser);if(!checkRepeatPWD) {log.error(TUserConstant.PWD_REPEAT_ERROR);return ResponseData.error(ResponseCode.PASS_REPEAT_ERROR);}
修改密码日志表
-- Drop table
-- DROP TABLE public.t_user_password_log;
CREATE TABLE public.t_user_password_log (
id varchar(32) NOT NULL,
user_name varchar(255) NOT NULL,
login_name varchar(255) NOT NULL,
"password" varchar(255) NOT NULL,
create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT t_user_password_log_pkey PRIMARY KEY (id)
);
-- Drop table-- DROP TABLE public.t_user_password_log;CREATE TABLE public.t_user_password_log (id varchar(32) NOT NULL,user_name varchar(255) NOT NULL,login_name varchar(255) NOT NULL,"password" varchar(255) NOT NULL,create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,CONSTRAINT t_user_password_log_pkey PRIMARY KEY (id)
);-- Permissions