jboot1.4.3版本之后的session策略变化导致限流注解失效
jboot1.4.3前版本,用户访问都会自动给当前访问用户设置session
jboot1.4.3之后版本则不会,除非手动调用setSessionAttr("user","测试数据");才会给用户设置session;这样会导致以下结果:
jboot1.5.5中获取用户sessionid
String sessionid_first=getSession(true).getId()
如果没有手动给用户设置session
setSessionAttr("user","测试数据");
那么再此获取sessionid
String sessionid_second=getSession(true).getId()
此时sessionid_first和sessionid_second不一致;
那么问题来了,限流拦截其中如果用户第一次访问,1.4.3以后版本中就不会给用户设置一个默认session,所以每次sessionid都不一样,根据sessionid限流也就失去了意义!!!
以上问题不知是我设置的问题还是jboot版本更新导致的问题,请海哥解答!!!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
首先赞扬下:这个问题问的非常专业,也看出你对Jboot的源码非常熟悉。
首先说下Jboot分布式Session的设计,Jboot的分布式Session使用了redis等作为Session的存储介质,当一个空的Session存在redis时,用户每次访问的时候都要去刷新redis对这个空数据的失效时间。
因此为了提高性能,对于没有数据的Session,Jboot默认都会清除这个session。
但是造成了文章提到的 user limitaion 无效的问题,下个版本修复。