【问题标题】:Java Request.isRequestedSessionValid() still true after session expires会话过期后 Java Request.isRequestedSessionValid() 仍然为真
【发布时间】:2023-04-10 12:32:01
【问题描述】:

我正在使用 Spring Security 3.0 并创建了一个自定义过滤器来检查过期会话。

我的问题是,即使我让会话过期或注销,request.isRequestedSessionValid() 在我的过滤器中也会返回 true。如果我尝试访问任何安全页面,我会被重定向到我的登录页面,因此我知道会话管理工作正常。

我的理解是,当 Web 会话超时时,会话会自动失效,并且我还在 Spring Security 的注销元素中设置了 invalidate-session。会话如何仍然有效?我是否检查了错误的值?

【问题讨论】:

  • 我不确定如果没有会话,该调用是否会创建会话。试试request.getSession(false)。如果返回 null 那么你的另一个调用正在创建一个会话,所以使用它来检查。
  • 看起来你是对的,使用 request.getSession(false) 为我修复了它。添加您的评论作为答案,我会将其标记为已接受。谢谢

标签: java session security


【解决方案1】:

request.isRequestedSessionValid() 本身可以导致创建会话,即使在调用注销之后也是如此。改为使用request.getSession(false) != null 进行检查,这将确保未创建会话。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-01
    • 2011-05-02
    • 1970-01-01
    相关资源
    最近更新 更多