我们做的是利用token方式校验重复提交,当模拟用户一秒提交多次时,
就会有并发问题,于是想到在操作session的地方加锁,但是没有管用。不知道问什么,
难道是session有缓存?还是其他什么原因?
拦截器代码:
String uuId = (String) request.getSession().getAttribute("tokenReport");
if(uuId!=null){
synchronized (this) {
String tempUuId = (String) request.getSession().getAttribute("tokenReport");
if(paramRequest.equals(tempUuId)&&!"".equals(tempUuId)){
System.out.println("第一次提交");
request.getSession().removeAttribute("tokenReport");
return true;
}else{
System.out.println("重复提交了");
response.setHeader("Content-Type", "application/json;charset=UTF-8");
response.getWriter().write(JacksonUtils.toJsonString(new ResponseJson().failure(HttpStatus.BAD_REQUEST.toString(),"007","不能重复提交","",null)));
response.getWriter().close();
return false;
}
}
}else{
System.out.println("重复提交了");
response.setHeader("Content-Type", "application/json;charset=UTF-8");
response.getWriter().write(JacksonUtils.toJsonString(new ResponseJson().failure(HttpStatus.BAD_REQUEST.toString(),"007","不能重复提交","",null)));
response.getWriter().close();
return false;
}