/**
* 登录
* @param param 参数
* @return 返回结果
*/
@ApiOperation(value = "登录",notes = "登录")
@PostMapping("/selectLogin")
@ResponseBody
public AjaxResult selectLogin(@RequestBody Map param)
{
UserRegister userRegister=null;
//判断是否为邮箱登录
if(param.get("username").indexOf("@")!=-1) {
//通过邮箱查询
userRegister = userRegisterService.selectUserRegisterEmail(param.get("username"));
if(userRegister==null){
return error("失败,邮箱未注册");
}else{
if(("0").equals(userRegister.getDelFlag())){
return error("该用户已被注销");
}
}
//输入的密码进行加密比对
String inPassword=passwordService.encryptPassword(param.get("username"), param.get("password"), userRegister.getSalt());
String outPassword=userRegister.getPassword();
//验证登陆次数
String codeMsg = setTime(param.get("username") + "", inPassword, outPassword);
if("0".equals(codeMsg)){
return success();
}else{
return error(codeMsg);
}
} else{
//通过手机号查询
userRegister = userRegisterService.selectUserRegisterPhone(param.get("username"));
if(userRegister==null){
return error("失败,手机号未注册");
}else{
if(("1").equals(userRegister.getDelFlag())){
return error("该用户已被注销");
}
}
//输入的密码进行加密比对
String inPassword = passwordService.encryptPassword(param.get("username"), param.get("password"), userRegister.getSalt());
String outPassword = userRegister.getPassword1();
//验证登陆次数
String codeMsg = setTime(param.get("username") + "", inPassword, outPassword);
if("0".equals(codeMsg)){
String tokenCode = TokenProccessor.makeToken();
redisUtil.setStringValue(tokenCode+"",param.get("username")+"",SESSION_TIME);
return success(tokenCode);
}else{
return error(codeMsg);
}
}
}
/**
* 设置超时时间
* @param key 键
* @param inPassword
* @param outPassword
* @return
*/
private String setTime(String key,String inPassword,String outPassword){
//验证账户锁定
Boolean exit=redisUtil.isExits(key);
if(exit==true && ("true").equals(redisUtil.getStringValue(key))){
String username = secondToTime(redisUtil.getTll(key));
return "该账户已被锁,剩余"+username;
}else if(exit==true && "5".equals(redisUtil.getStringValue(key))){
//账户锁定 设置半小时锁定
redisUtil.setStringValue(key,"true",30*60);
String username = secondToTime(redisUtil.getTll(key));
return "该账户已被锁,剩余"+username;
}else{
if(inPassword.equals(outPassword)){
redisUtil.delete(key);
return "0";
}else{
if(redisUtil.isExits(key)){
redisUtil.setIncr(key);
}else{
redisUtil.setEx(key,300,"1");
}
System.err.println("第" + redisUtil.getStringValue(key) + "次登录失败");
if("5".equals(redisUtil.getStringValue(key))){
return "您已连续输错" + redisUtil.getStringValue(key) + " 次,账户已锁定,请半小时以后再次登陆";
}else{
return "登陆失败,密码错误";
}
}
}
}
private String secondToTime(long second) {
long days = second / 86400;//转换天数
second = second % 86400;//剩余秒数
long hours = second / 3600;//转换小时数
second = second % 3600;//剩余秒数
long minutes = second / 60;//转换分钟
second = second % 60;//剩余秒数
if (0 < days){
return days + "天"+hours+"小时"+minutes+"分"+second+"秒";
}else {
return hours+"小时"+minutes+"分"+second+"秒";
}
}