alexxiyang / shiro-redis

shiro only provide the support of ehcache and concurrentHashMap. Here is an implement of redis cache can be used by shiro. Hope it will help you!
MIT License
1.17k stars 446 forks source link

session线程保存的问题 #124

Closed ETouchs closed 4 years ago

ETouchs commented 4 years ago

集成shiro-redis,发现一个问题,暂时排查出来可能由此引起,技术不行,不太确定,希望大佬核实一下

在shiro-redis中,为了减少对redis的访问,发现每个线程都对当前访问的session进行了保存,并设置了过期时间

现在这样操作:在登录完成之后,js页面进行跳转,页面中立即开启多个ajax访问资源,发现某些ajax被重定向到login页面(非必现),shiro日志排查发现这条线程并没有获取到对应的subject,所以怀疑这条线程可能保存的session是没登录之前的,查找shiro-redis代码并没发现清理线程threadlocal中的session信息

麻烦大佬核实一下,是不是此问题导致的

ETouchs commented 4 years ago

另:发现springboot starter中,参数shiro-redis.session-dao.session-in-memory-enabled设置并没起作用,排查发现并没有properties中并没有对应属性

alexxiyang commented 4 years ago

确实,doReadSession只取消了过期的当前Session,应该检查整个ThreadLocal中的所有Session。已经在3.3.0中加入了。 shiro-redis.session-dao.session-in-memory-enabled 可设置为false 见testTurnOffSessionInMemoryEnabled