HttpSession线程不安全的问题

问题现象:PC管理端的接口请求,进行了Token的拦截验证,Token更新的机制为10分钟更新一次,并保留旧Token3分钟有效,Token保存在session中。这时会引起一个问题,当触发更新的动作时,刚好有多个并发请求上来,带的都是同一个Token,此时后端存的Token是需要更新的,因为更新Token的逻辑加了锁,即只有第一个线程有资格触发创建新的Token,并同步更新session中的Token,其它线程不会触发,恰恰是因为存到了session中,当第一个线程触发更新机制后,并将Token响应给前端,而在极短的时间差内,前端拿到了这个新newToken后再次发起了请求,而后端session存在的Token竟然还是旧的Token,导致验证失败。

 

解决方法:将Token存到Redis中。

你可能感兴趣的:(springboot)