功能demo:标题登录多次输入错误密码后,让用户五分钟内不可继续登录
ServletContext servletContext = attributes.getRequest().getServletContext();
//校验是否锁定
Object attribute1 = servletContext.getAttribute(admin.getLogin());
JSONObject json;
BaseResponse<Object> fail = BaseResponse.fail();
if(attribute1==null){
json = new JSONObject();
json.put("num",1);
json.put("date",System.currentTimeMillis());
json.put("lock",false);
servletContext.setAttribute(admin.getLogin(),json);
}else{
json = JSONObject.parseObject(JSON.toJSONString(attribute1));
json.put("num",json.getIntValue("num")+1);
servletContext.setAttribute(admin.getLogin(),json);
if(json.getIntValue("num")>=3){
json.put("num",1);
json.put("lock",true);
json.put("date",System.currentTimeMillis());
servletContext.setAttribute(admin.getLogin(),json);
fail.setMsg("账号已锁定,请五分钟后再试");
return fail;
}
if(json.getBoolean("lock") ){
json.put("num",1);
if(System.currentTimeMillis() - json.getLongValue("date")<30*1000){
servletContext.setAttribute(admin.getLogin(),json);
fail.setMsg("账号已锁定,请稍后再试!");
return fail;
}
json.put("lock",false);
servletContext.setAttribute(admin.getLogin(),json);
}
}
//如果相等,登陆成功
if("123".equals(admin.getPsw())){
servletContext.removeAttribute(admin.getLogin());
return BaseResponse.ok(null);
}
//如果不相等
fail.setMsg("密码错误");
return fail;
在这里插入代码片
如果是多节点,可以使用redis代替servletContext