帮助在春季捕获会话超时

时间:2011-04-12 22:19:09

标签: java spring session timeout

我有一个简单的Spring 3 MVC应用程序。我正在使用sessionAttribute,一切正常,除非我让页面停留30分钟或更长时间。然后我得到了一个

org.springframework.web.HttpSessionRequiredException

告诉我在会话中找不到我的对象。

我在想,当发生会话超时时,我需要以某种方式重定向回同一页面。我不确定如何正确使用弹簧。

无需登录,我已经在检查对象是否为空。

任何建议都将不胜感激。

由于

2 个答案:

答案 0 :(得分:7)

您可以将错误页面绑定添加到HttpSessionRequiredException,它将重定向到您应用程序中的第一页

示例:

的web.xml

<web-app>
    <error-page>
        <exception-type>org.springframework.web.HttpSessionRequiredException</exception-type>
        <location>/index.jsp</location>
    </error-page>
</web-app>

答案 1 :(得分:0)

您无法将“重定向”重定向到同一页面。您的会话已经消失,即您在客户端上的cookie不再对应于servlet容器中的任何会话,因为会话对象已从内存中删除。完全不可逆转。

您可以增加会话超时。这是应用程序配置,而不是Spring:

的web.xml:

   <session-config>
     <session-timeout>120</session-timeout>
   </session-config>

会给你两个小时的空闲时间。

请注意,会话不是免费的。它们消耗资源(内存和磁盘,序列化时)。如果同一个用户可以多次重新登录,他们将有多个空闲会话,并可能导致您的DoS。

P.S。如果你已经离开了会话,并且只想立即建立另一个会话,你总是可以在过滤器中做到,不管是不是Spring。春天可能有自己的听众。您必须在该全新会话中添加一些内容才能使您的请求有效。