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 实现,您可以设置 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
【讨论】:
以上是关于Tomcat 重启后 Apache Shiro isAuthenticated 返回 true的主要内容,如果未能解决你的问题,请参考以下文章
拦截404页面时tomcat抛出异常: org.apache.shiro.UnavailableSecurityManagerException