SpringMVC中在拦截器对操作的session加锁,为什么不管用 5C

我们做的是利用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;
                }

2个回答

会不会this不是单例的,把synchronize(this)的this换成一个静态类变量看看。

不用加锁的。。图片说明
这样就可以了。。

qq_33500630
邢小泽 回复的有点晚哈,不加锁,在压力测试下,是无法通过的。
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐