【问题标题】:Help catching session timeout in spring在春季帮助捕捉会话超时
【发布时间】:2011-08-04 06:42:38
【问题描述】:

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

org.springframework.web.HttpSessionRequiredException

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

我想当会话超时发生时,我需要以某种方式重定向回同一页面。我不确定如何使用 spring 正确执行此操作。

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

任何建议将不胜感激。

谢谢

【问题讨论】:

    标签: java spring session timeout


    【解决方案1】:

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

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

    web.xml:

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

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

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

    附:如果您对离开会话没问题,并且只想立即建立另一个会话,那么您始终可以在过滤器中进行,无论是否是 Spring。 Spring 可能有自己的听众。您必须在该全新会话中添加一些内容才能使您的请求生效。

    【讨论】:

      【解决方案2】:

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

      示例:

      web.xml

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

      【讨论】:

      • 你能举个例子吗?
      • 谢谢,看来它可以工作了。我只是想让我的错误页面正确映射。从我注意到的情况来看,它看起来将通过 spring 调度程序 servlet 映射回来,所以我需要在我的一个控制器中添加一个映射才能转到此页面?
      • @blong824,我不太了解 spring mvc,但我的解决方案在 web 应用程序中很典型,所以我认为你应该只进行上述错误页面映射并且应该可以工作。
      猜你喜欢
      • 2012-02-17
      • 1970-01-01
      • 2015-10-19
      • 2014-11-20
      • 2017-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多