【问题标题】:Apache Shiro isAuthenticated returns true after Tomcat restartTomcat 重启后 Apache Shiro isAuthenticated 返回 true
【发布时间】: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。

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

【问题讨论】:

    标签: java tomcat shiro catalina


    【解决方案1】:

    我不确定你的 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 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-08
      • 2015-12-30
      • 1970-01-01
      • 1970-01-01
      • 2015-11-11
      • 1970-01-01
      • 2020-11-05
      相关资源
      最近更新 更多