工具类——错误登录次数超过6次,需等待30s才能登录

//记录错误次数
public static final ConcurrentMap<String,Integer> LOGIN_FAILED_MAP=new ConcurrentHashMap<String,Integer>();
//记录错误次数最大时的时间(毫秒)     
public static final ConcurrentMap<String,Long> LOGIN_FAILED_TIME_MAP=new ConcurrentHashMap<String,Long>();

     /**
     * <p class="detail">
     * 功能:用户登录
     * </p>
     *
     * @author junly
     * @param userName
     * @param passWord
     * @param userTypes
     * @param request
     * @param response
     * @param respObj
     * @return
     */
    public ResponseObj login(String userName, String passWord, Integer userType, HttpServletRequest request,
            HttpServletResponse response, ResponseObj respObj) {
        Long mSecondByNow = 0l;
        try {
            //yyyy-MM-dd HH:mm:ss转毫秒数
            mSecondByNow = Long.parseLong(DateUtil.dateToStamp(DateUtil.dateFormat(new Date(), "yyyy-MM-dd HH:mm:ss")));
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("是否存在KEY="+LOGIN_FAILED_MAP.containsKey(userName));
        if(LOGIN_FAILED_TIME_MAP.containsKey(userName) && (mSecondByNow-LOGIN_FAILED_TIME_MAP.get(userName)<=30000) && mSecondByNow>LOGIN_FAILED_TIME_MAP.get(userName)){
            respObj.setStatus(ViewShowEnums.ERROR_FAILED.getStatus());
            respObj.setShowMessage("请在"+(30-(mSecondByNow-LOGIN_FAILED_TIME_MAP.get(userName))*0.001)+"秒后重试");
            return respObj;
        }
        Map<String, Object> param = new HashMap<String, Object>();
        param.put("userName", userName);
        param.put("userType", userType);
        param.put("passWord", passWord);
        UserInfo userInfo = sysUserInfoMapper.selecLogintUserInfoByParam(param);
        if (userInfo == null) {
            Map<String, Object> map = new HashMap<String, Object>();
            map.put("userName", userName);
            UserInfo userDetail = sysUserInfoMapper.selecLogintUserInfoByParam(map);
            //检验密码是否相等            
            if(userDetail!=null && !userDetail.getPassWord().equals(passWord)){
                if(LOGIN_FAILED_MAP.containsKey(userName)){
                    LOGIN_FAILED_MAP.put(userName, LOGIN_FAILED_MAP.get(userName)+1);
                    System.out.println("第"+LOGIN_FAILED_MAP.get(userName)+"次登录为"+LOGIN_FAILED_MAP.toString());
                    if(LOGIN_FAILED_MAP.get(userName)==6){
                        LOGIN_FAILED_TIME_MAP.put(userName,mSecondByNow);
                        respObj.setStatus(ViewShowEnums.ERROR_FAILED.getStatus());
                        respObj.setShowMessage("您的密码已输入错误6次,请30秒后重试");
                        LOGIN_FAILED_MAP.remove(userName);
                        return respObj;
                    }else{
                        respObj.setStatus(ViewShowEnums.ERROR_FAILED.getStatus());
                        respObj.setShowMessage("密码输入错误");
                        return respObj;
                    }
                }else{
                    LOGIN_FAILED_MAP.put(userName,1);
                    System.out.println("第"+LOGIN_FAILED_MAP.get(userName)+"次登录为"+LOGIN_FAILED_MAP.toString());
                    respObj.setStatus(ViewShowEnums.ERROR_FAILED.getStatus());
                    respObj.setShowMessage("密码输入错误");
                    return respObj;
                }
            }else{
                respObj.setStatus(ViewShowEnums.ERROR_FAILED.getStatus());
                respObj.setShowMessage("用户不存在");
                return respObj;
            }
        }else{
            LOGIN_FAILED_MAP.remove(userName);
            LOGIN_FAILED_TIME_MAP.remove(userName);
            param.put("userId", userInfo.getUserId());      
            Map<String,Object> l=sysUserInfoMapper.queryUserInfo(param);       
            TicketModel ticketModel = new TicketModel();
            BeanUtils.copyProperties(userInfo, ticketModel);
            //BeanUtils.copyProperties(l, ticketModel);
            //respObj.setData(ticketModel);
            Map<String,Object> resultMap=new HashMap<String,Object>();
            // 修改用户
            UserInfo userInfoUp = new   UserInfo();
            userInfoUp.setUserId(userInfo.getUserId());
            userInfoUp.setUpdateTime(new Date());
            userInfoUp.setLastLoginTime(userInfoUp.getUpdateTime());
            userInfoUp.setLastLoginIp(userInfoUp.getLoginIp());
            userInfoUp.setLoginIp(RequestParam.getRealAddress(request));
            sysUserInfoMapper.updateByPrimaryKeySelective(userInfoUp);
            setTicket(ticketModel, request, response, respObj);
            //resultMap.put("userInfo", l);
            //resultMap.put("ticket", ticketModel.getTicket());
            l.put("ticket", ticketModel.getTicket());
            SysLogin sl=new SysLogin();
            sl.setDevType(UserTypeEnums.MEMBER.getCode());
            sl.setUserId(Long.parseLong(userInfo.getUserId()));
            sl.setTicket(ticketModel.getTicket());
            sl.setLoginTime(new Date());
            sysLoginMapper.insert(sl);
            respObj.setData(l);
        }
        return respObj;
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值