jfinal, shiro 整合tomcat设置的30分钟session过期时间没起作用

项目现在有个问题,就是shiro,  jfinal整合后,没5分钟左右就会自动退出登录,tomcat的timeout不起作用。我是实在想不到,怎么跟踪问题了,哪位大神有跟踪经验或者遇到过类似问题的,望指点一二,谢谢。

评论区

JFinal

2019-05-07 16:11

先定位问题,到底是哪里失效的 tomcat 要配置 web.xml , 注意大小写

tuxming

2019-05-07 16:12

web.xml没有配置,但是我在tomcat的service.xml里面配置了,应该也有作用吧。

tuxming

2019-05-07 16:13

我主要是现在不知道怎么定位这种问题,因为没办法debug

JFinal

2019-05-07 16:24

@tuxming 这种问题很好定位,java 的 web 组件可以监听 session 的创建、消毁,多搜索下资料,或许添加个 Listener ,打打断点即可

JFinal

2019-05-07 16:24

@tuxming web.xml 中没有配置,明显是这个错误引发的

tuxming

2019-06-17 19:33

web.xml里面设置session timeout 是可选的吧,不是必须的设置吧!

tuxming

2019-08-20 16:13

问题已解决, 与项目无关,ehcache.xml里面的chche的name=shiro-activeSessionCache的设置没生效,需要手动指定。

#参考: http://shiro.apache.org/session-management.html#SessionManagement-EHCacheSessionCacheConfiguration
#这里其实不用配置,默认就是这个策略
sessionDAO = org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO
securityManager.sessionManager.sessionDAO = $sessionDAO
sessionDAO.activeSessionsCacheName =shiro-activeSessionCache

tuxming

2020-01-11 19:04

这次是真的解决了。。。
我这里是对ehcache.xml的配置理解不够,
我之前的配置:

timeToIdleSeconds="600"
timeToLiveSeconds="1800"
这个意思:10分钟无访问,则过期,但是怎么都不会存活30分钟。

timeToIdleSeconds:设置对象在失效前的允许闲置时间(单位:秒)。仅当eternal=false对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。
timeToLiveSeconds:设置对象在失效前允许存活时间(单位:秒)。最大时间介于创建时间和失效时间之间。仅当eternal=false对象不是永久有效时使用,默认是0.,也就是对象存活时间无穷大。


假设 timeToIdleSeconds=x, timeToLiveSeconds=y
x=60, y=0, 60s之内必须有访问一次,如果没有则失效
x=0, y=60, 无论期间是否访问, 60s之后都会失效
x=30, y=60 每隔30s必须访问一次,如果没有访问则失效, 但总存活时间不超过60s

所以要设置session 30分钟不过期:
timeToIdleSeconds="1800"
timeToLiveSeconds="0"
表示: session 30分钟无访问则过期, 否则永不过期

热门反馈

扫码入社