|
@@ -17,6 +17,7 @@ import com.caimei365.user.model.vo.*;
|
|
|
import com.caimei365.user.service.LoginService;
|
|
|
import com.caimei365.user.service.RemoteCallService;
|
|
|
import com.caimei365.user.utils.JwtUtil;
|
|
|
+import com.caimei365.user.utils.MathUtil;
|
|
|
import com.caimei365.user.utils.Md5Util;
|
|
|
import com.github.pagehelper.PageHelper;
|
|
|
import com.github.pagehelper.PageInfo;
|
|
@@ -99,16 +100,19 @@ public class LoginServiceImpl implements LoginService {
|
|
|
}
|
|
|
//处理比对密码
|
|
|
UserLoginVo baseUser = loginMapper.getLoginUserByMobileOrEmail(mobileOrEmail);
|
|
|
-
|
|
|
- if (baseUser != null) {
|
|
|
+ if (null != baseUser) {
|
|
|
+ String key = "login-" + baseUser.getUserId();
|
|
|
+ boolean exists = redisService.exists(key);
|
|
|
//如果30分钟内输入错误记录>=5,return该账号暂时被冻结,请(30-最前一次时间)分钟后重试或直接修改密码
|
|
|
- Calendar c = Calendar.getInstance();
|
|
|
- c.setTime(new Date());
|
|
|
- c.add(Calendar.MINUTE, -30);
|
|
|
- List<LoginFailRecordVo> fail = loginMapper.findLoginFailRecord(baseUser.getUserId(), c.getTime());
|
|
|
- if (null != fail && fail.size() >= 5) {
|
|
|
- Integer minutes = loginMapper.findTimes(fail.get(0).getId(),new Date());
|
|
|
- return ResponseJson.error("该账号暂时被冻结,请" + (30 - minutes) + "分钟后重试或直接修改密码", null);
|
|
|
+ if (exists) {
|
|
|
+ String val = (String) redisService.get(key);
|
|
|
+ String[] split = val.split(",");
|
|
|
+ int count = Integer.parseInt(split[0]);
|
|
|
+ if (count >= 5) {
|
|
|
+ long s = Long.parseLong(split[1]);
|
|
|
+ int l = (int) Math.floor((System.currentTimeMillis() - s) / 1000 / 60);
|
|
|
+ return ResponseJson.error("该账号暂时被冻结,请" + (30-l) + "分钟后重试或直接修改密码", null);
|
|
|
+ }
|
|
|
}
|
|
|
// 如果前端传入unionId,则存入返回前端
|
|
|
baseUser.setUnionId(unionId);
|
|
@@ -135,9 +139,21 @@ public class LoginServiceImpl implements LoginService {
|
|
|
}
|
|
|
} else {
|
|
|
// 增加一次错误输入密码记录,30分钟内连续五次冻结
|
|
|
- loginMapper.insertLoginFailRecord(new Date(),baseUser.getUserId());
|
|
|
- if (null != fail && 4 ==fail.size() ) {
|
|
|
- return ResponseJson.error("您已连续输错5次密码,账号被暂时冻结,请于30分钟后重试或直接修改密码",null);
|
|
|
+ if (exists) {
|
|
|
+ String val = (String) redisService.get(key);
|
|
|
+ String[] split = val.split(",");
|
|
|
+ int count = Integer.parseInt(split[0]);
|
|
|
+ if (count < 5) {
|
|
|
+ count++;
|
|
|
+ String va = count + "," + System.currentTimeMillis();
|
|
|
+ redisService.set(key, va);
|
|
|
+ }
|
|
|
+ if (count >= 5) {
|
|
|
+ redisService.set(key, 5 + "," + System.currentTimeMillis(), 1800L);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ String val = 1 + "," + System.currentTimeMillis();
|
|
|
+ redisService.set(key, val);
|
|
|
}
|
|
|
}
|
|
|
}
|