在Tomcat重启后,Apache Shiro isAuthenticated返回true

时间:2018-05-10 11:05:37

标签: java tomcat shiro catalina

我使用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。

因此我想知道我是否遗漏了一些东西,例如是否有任何必须在之前执行的操作,或者这是使用此方法的错误方法?谢谢你的关注。

1 个答案:

答案 0 :(得分:0)

我不确定你的Shiro配置是怎样的,但是根据你的实现,Shiro默认设置一个cookie,它在服务器重启后仍然有效。

根据您的SessionManager实施,您可以设置globalSessionTimeoutsessionValidationInterval。默认会话超时设置为1800000L(30分钟)。请参阅AbstractSessionManagerDefaultWebSessionManager。示例实现:

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