这里登录我是从UserController中摘出来的,为了设置拦截器用的
controller层
/**
* 登录
* @param user
* @return
*/
@PostMapping("/toLogin")
public ResultBody<MenuPo> queryUserById(@RequestBody User user) throws JsonProcessingException {
ResultBody login = userService.queryNameByMenu(user);
return login;
}
UserService层
/**
* 登录
* @param user
* @return
*/
ResultBody queryNameByMenu(User user) throws JsonProcessingException;
UserServiceImpl层 这里测试我用的是60s
private static final String userName ="userName:";
public static final Long time = 60L;
/**
* 登录
*
* @param user
* @return
*/
@Override
public ResultBody queryNameByMenu(User user) throws JsonProcessingException {
//判断是否锁定
String b = combinationLock(user.getName());
if(b != null){
return ResultBody.error(CommonEnum.TIME_OUT.getResultCode(), CommonEnum.TIME_OUT.getResultMsg(),b);
}
//通过用户名查询
User name = userMapper.selectOne(new QueryWrapper<User>()
.eq("name", user.getName()));
if (name == null) {
if(b != null){
return ResultBody.error(CommonEnum.TIME_OUT.getResultCode(), CommonEnum.TIME_OUT.getResultMsg(),b);
}
return ResultBody.error(CommonEnum.NAME_ERROR.getResultCode(), CommonEnum.NAME_ERROR.getResultMsg());
} else {
//通过用户比对密码
if (name.getPassword().equals(user.getPassword())) {
MenuPo menuPo = userMapper.queryNameByMenu(user);
//token
String sign = JwtUtils.sign(user.getName());
menuPo.setToken(sign);
//httpServletRequest.getSession().setAttribute(user.getName(),name);
redisUtils.redisStringSet(sign,user.getName());
return ResultBody.success(menuPo);
} else {
if(b != null){
return ResultBody.error(CommonEnum.TIME_OUT.getResultCode(), CommonEnum.TIME_OUT.getResultMsg(),b);
}
return ResultBody.error(CommonEnum.NAME_ERROR.getResultCode(), CommonEnum.NAME_ERROR.getResultMsg());
}
}
}
/**
* 密码锁
* @return
*/
public String combinationLock(String name) throws JsonProcessingException {
String s = redisUtils.redisStringGet(userName + name);
if(s==null){
CombinationLockPo combinationLockPo = new CombinationLockPo();
combinationLockPo.setNum(1);
redisUtils.redisStringSet(userName + name,combinationLockPo,time);
}else {
CombinationLockPo parse = JSONObject.parseObject(s,CombinationLockPo.class);
//判断是否有无超时
if(parse.getTime() == null){
//判断登录次数三次
if(parse.getNum() < 3){
parse.setNum(parse.getNum()+1);
redisUtils.redisStringSet(userName + name,parse,time);
}else {
Long oneHour = Long.valueOf(1000*60); //60s 用于测试
long time = new Date().getTime();
Long overTime = oneHour + time;
parse.setTime(overTime);
redisUtils.redisStringSet(userName + name,parse,time);
}
}else {
long newTime = new Date().getTime();
Long time = parse.getTime();
if(time > newTime){
Long lo = time - newTime;
Long lon = lo/1000;
return lon.toString();
}
else {
redisUtils.redisDelteKey(userName + name);
}
}
}
return null;
}