登录系统后校验弱密码示例(前端可以自定义校验规则)

//前端自定义规则校验(前端页面增加缓存window.sessionStorage机制)

规则组成:

1、checkRuleStr:弱密码组成字符串,多个使用英文逗号,隔开

2、checkDateStartStr:可传入校验指定日期之后的日期字符串, 例如 校验“2021-06-30 00:00:00”之后注册的账号;不传则默认校验全部账号

3、checkDateEndStr:校验指定日期之前的账号 例如 校验“2021-07-30 00:00:00”之前注册的账号;不传则默认校验全部账号

4、增加window.sessionStorage缓存机制,同一个页面下不进行多次提示,增强用户体验度

注意:window.sessionStorage和window.localStorage 区别

(1)只要浏览器保持打开状态, sessionStorage 就会持续存在,(即同一个浏览器窗口下,即使点击刷新后依旧存在)

(2)localStorage 在浏览器重新启动后仍然存在,持久性适用于整个网站不只是它的一个页面。

前端JS示例:

/**
	 *  登录后校验弱密码
	 * @param passwordStr        旧密码加密串
	 * @param customerId         客户编号
	 * @param checkRuleStr       校验字符规则 例如 校验“123456,12345678”这种初始弱密码(多个使用英文逗号拼接),不传默认校验 123456 弱密码
	 * @param checkDateStartStr       校验指定日期之后的账号 例如 校验“2021-06-30 00:00:00”之后注册的账号;不传则默认校验全部账号
	 * @param checkDateEndStr         校验指定日期之前的账号 例如 校验“2021-07-30 00:00:00”之前注册的账号;不传则默认校验全部账号
	 */
	function checkWeakPwd(checkRuleStr,checkDateStartStr,checkDateEndStr) {
			var passwordStr = "${password}";        //当前密码加密串
			var customerId = "${customerId}";       //客户编号
			var displayName = "${displayName}";     //当前用户名
			var isNeedCheckPwdAgainFlag = window.sessionStorage.getItem('isNeedCheckPwdAgainFlag');  //获取缓存数据
			if(!isNeedCheckPwdAgainFlag || isNeedCheckPwdAgainFlag != displayName){
				if (passwordStr) {
					var url = 'user/checkWeakPwd';
					/*if(!checkDateStartStr) {
						checkDateStartStr = "2021-06-30 00:00:00";   //校验此日期之后的注册的用户是否存在弱密码
					}*/
					var paramData = {
						passwordStr: passwordStr,
						customerId: customerId,
						checkRuleStr: checkRuleStr,
						checkDateStartStr: checkDateStartStr,
						checkDateEndStr: checkDateEndStr,
					}
					console.log(passwordStr);
					$.ajax({
						url: url,    //请求的url地址
						contentType: 'application/json',
						dataType: "json",   //返回格式为json
						async: true,//请求是否异步,默认为异步,这也是ajax重要特性
						data: JSON.stringify(paramData),    //参数值
						type: "POST",   //请求方式
						beforeSend: function () {
							//请求前的处理
						},
						success: function (req) {
							//请求成功时处理
							if (req.code == '0') {
								layer.confirm(req.msg, {btn: ["确定修改", "稍后提醒"]}, function (index) {
									layer.close(index);
									if (!window.sessionStorage.getItem('isNeedCheckPwdAgainFlag') || window.sessionStorage.getItem('isNeedCheckPwdAgainFlag') != displayName) {
										window.sessionStorage.setItem('isNeedCheckPwdAgainFlag', displayName);   //只要浏览器保持打开状态, sessionStorage 就会持续存在, localStorage 在浏览器重新启动后仍然存在,持久性适用于整个网站不只是它的一个页面。
									}
									//提示修改密码
									$.post('user/showChangePwdPage', function (data) {
										layer.open({
											type: 1,
											title: "修改密码",
											maxmin: true,
											shadeClose: false, //点击遮罩关闭层
											area: ['350px', '250px'],
											content: data,
											closeBtn: 0
										});
									}, "html");
								});
							} else {
								//当前账号不校验弱密码
							}
						},
						complete: function () {
							//请求完成的处理
						},
						error: function () {
							//请求出错处理
						}
					});
				}
			}
	}

//后端接收规则检测示例:

/**
     * 校验弱密码
     * @param paramMap 参数map接收
     * @return 操作结果
     */
    @RequestMapping(value = "/checkWeakPwd", method = {RequestMethod.POST, RequestMethod.GET}, produces = {"application/json;charset=UTF-8"})
    @ResponseBody
    public Map checkWeakPwd(@RequestBody Map paramMap, HttpServletRequest request) {
        /*
        * @param passwordStr        旧密码加密串
        * @param customerId         客户编号
        * @param checkRuleStr       校验字符规则 例如 校验“123456,12345678”这种初始弱密码(多个使用英文逗号拼接),不传默认校验 123456 弱密码
        * @param checkDateStartStr       校验指定日期之后的账号 例如 校验“2021-06-30”之后注册的账号;不传则默认校验全部账号
        * @param checkDateEndStr         校验指定日期之前的账号 例如 校验“2021-07-30”之前注册的账号;不传则默认校验全部账号
         */
        Map result = new HashMap();  //返回结果集
        String passwordStr = null;
        String customerId = null;
        String checkRuleStr = null;
        String checkDateStartStr = null;
        String checkDateEndStr = null;
        if(paramMap.containsKey("passwordStr")){
            passwordStr = (String)paramMap.get("passwordStr");
        }
        if(paramMap.containsKey("customerId")){
            customerId = (String)paramMap.get("customerId");
        }
        if(paramMap.containsKey("checkRuleStr")){
            checkRuleStr = (String)paramMap.get("checkRuleStr");
        }
        if(paramMap.containsKey("checkDateStartStr")){
            checkDateStartStr = (String)paramMap.get("checkDateStartStr");
        }
        if(paramMap.containsKey("checkDateEndStr")){
            checkDateEndStr = (String)paramMap.get("checkDateEndStr");
        }
        try {
            if(StringUtils.isEmpty(checkRuleStr)){
                checkRuleStr = "123456";    //默认校验 123456这种弱密码
            }
            boolean isNeedCheckWeakPwd = false;   //默认不需要校验弱密码
            if(StringUtils.isNotEmpty(passwordStr) && StringUtils.isNotEmpty(customerId)){
                String accountId = ShiroUtils.getUserId();
                Account account = accountService.findAccount(accountId);
                Date registerDate = account.getCreatetime();    //账号注册时间
                if(StringUtils.isNotEmpty(checkDateStartStr) && StringUtils.isNotEmpty(checkDateEndStr)){
                    Date checkDateStart = CalendarUtil.parse(checkDateStartStr,CalendarUtil.FORMAT_THREE);
                    Date checkDateEnd = CalendarUtil.parse(checkDateEndStr,CalendarUtil.FORMAT_THREE);
                    if(registerDate.getTime() >= checkDateStart.getTime() && registerDate.getTime() <= checkDateEnd.getTime()){
                        //注册时间在校验指定时间之内,需要校验弱密码
                        isNeedCheckWeakPwd = true;
                    }
                }else if(StringUtils.isNotEmpty(checkDateStartStr) && StringUtils.isEmpty(checkDateEndStr)){
                    Date checkDateStart = CalendarUtil.parse(checkDateStartStr,CalendarUtil.FORMAT_THREE);
                    if(registerDate.getTime() >= checkDateStart.getTime()){
                        //注册时间在校验指定时间开始之后,需要校验弱密码
                        isNeedCheckWeakPwd = true;
                    }
                }else if(StringUtils.isEmpty(checkDateStartStr) && StringUtils.isNotEmpty(checkDateEndStr)){
                    Date checkDateEnd = CalendarUtil.parse(checkDateEndStr,CalendarUtil.FORMAT_THREE);
                    if(registerDate.getTime() <= checkDateEnd.getTime()){
                        //注册时间在校验指定时间结束之前,需要校验弱密码
                        isNeedCheckWeakPwd = true;
                    }
                }else{
                    //没有传入时间校验限制,则需要校验全部账号的弱密码
                    isNeedCheckWeakPwd = true;
                }
                if(isNeedCheckWeakPwd){
                    if(customerId.equals(account.getCustomerId())){
                        //相同企业才校验账号弱密码
                        if(StringUtils.isNotEmpty(checkRuleStr)){
                            boolean isWeakPwdFlag = false;
                            String[] checkRuleArray = checkRuleStr.split(",");
                            if(checkRuleArray.length > 0){
                                for(int i=0;i

你可能感兴趣的:(前端踩坑,java类,前端,javascript,html5)