问题现象:PC管理端的接口请求,进行了Token的拦截验证,Token更新的机制为10分钟更新一次,并保留旧Token3分钟有效,Token保存在session中。这时会引起一个问题,当触发更新的动作时,刚好有多个并发请求上来,带的都是同一个Token,此时后端存的Token是需要更新的,因为更新Token的逻辑加了锁,即只有第一个线程有资格触发创建新的Token,并同步更新session中的Token,其它线程不会触发,恰恰是因为存到了session中,当第一个线程触发更新机制后,并将Token响应给前端,而在极短的时间差内,前端拿到了这个新newToken后再次发起了请求,而后端session存在的Token竟然还是旧的Token,导致验证失败。
解决方法:将Token存到Redis中。
在PC管理端接口请求中,采用Token进行身份验证,每10分钟更新一次Token并保留旧Token3分钟有效。但在高并发场景下,前端可能在短时间内使用已更新但后端尚未同步的Token,导致验证失败。解决办法是将Token存储于Redis中,以避免session的同步延迟问题。
354

被折叠的 条评论
为什么被折叠?



