Tomcat 重启后 Apache Shiro isAuthenticated 返回 true

Posted

技术标签:

【中文标题】Tomcat 重启后 Apache Shiro isAuthenticated 返回 true【英文标题】:Apache Shiro isAuthenticated returns true after Tomcat restart 【发布时间】:2018-10-20 15:22:15 【问题描述】:

我有一个使用 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】:

我不确定你的 Shiro 配置是什么样的,但取决于你的实现,Shiro 默认设置一个 cookie,它在你的服务器重新启动后仍然有效。

根据您的 SessionManager 实现,您可以设置 globalSessionTimeoutsessionValidationInterval。默认会话超时设置为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 

【讨论】:

以上是关于Tomcat 重启后 Apache Shiro isAuthenticated 返回 true的主要内容,如果未能解决你的问题,请参考以下文章

拦截404页面时tomcat抛出异常: org.apache.shiro.UnavailableSecurityManagerException

ssm整合shiro时web。xml中配置filter,tomcat报错

tomcat和shiro的关于session的问题

tomcat和shiro的关于session的问题

windows 下如何重启apache

windows下如何重启apache服务器