2011-03-22 79 views
0

我使用Spring Security 3.0并创建了一个自定义过滤器来检查过期的会话。会话过期后Java仍然为Request.isRequestedSessionValid()

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

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

+0

我不确定这个调用是否会创建一个会话,如果没有。尝试'request.getSession(false)'。如果返回null,那么你的另一个调用正在创建一个sesssion,所以用它来检查。 – Melv 2011-03-22 21:35:48

+0

看起来你是对的,使用request.getSession(false)为我修复它。添加您的评论作为答案,我会将其标记为已接受。 谢谢 – 2011-03-22 22:00:39

回答

2

request.isRequestedSessionValid()本身可以导致会话被创建,即使在注销被调用之后。使用request.getSession(false) != null进行检查,以确保不会创建会话。