我使用Tomcat(8.0.32)部署了一个webapp,并且每次重新部署时登录/注销操作都能正常工作。但是,如果我停止Catalina而不重新部署webapp(./catalina.sh stop
然后./catalina.sh start
而不对webapp文件夹的内容进行任何更改),它们就无法正常工作。发生的情况是,方法org.apache.shiro.subject.Subject.isAuthenticated()
在服务器启动后立即返回true
,但在新的登录操作发生之前。
更具体地说,我对javax.servlet.Filter.doFilter
的实现从以下行开始:
if(org.apache.shiro.SecurityUtils.getSubject().isAuthenticated()) ...
在服务器重新启动后但在新登录之前返回true。 Shiro的版本是1.3.0。
因此我想知道我是否遗漏了一些东西,例如是否有任何必须在之前执行的操作,或者这是使用此方法的错误方法?谢谢你的关注。
答案 0 :(得分:0)
我不确定你的Shiro配置是怎样的,但是根据你的实现,Shiro默认设置一个cookie,它在服务器重启后仍然有效。
根据您的SessionManager实施,您可以设置globalSessionTimeout
和sessionValidationInterval
。默认会话超时设置为1800000L(30分钟)。请参阅AbstractSessionManager和DefaultWebSessionManager。示例实现:
sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager
# Session timeout token_ttl_ms = 14 days
sessionManager.globalSessionTimeout = 1209600000
# Session valdiation = 15 minutes
sessionManager.sessionValidationInterval = 900000
如果您不想使用任何cookie,可以通过在SecurityManager配置中设置以下属性并完全跳过SessionManager的会话管理来禁用它:
securityManager.sessionManager.sessionIdCookieEnabled = false