//记录错误次数
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;
}