2011-04-12 99 views
2

我有一个简单的Spring 3 MVC应用程序。我使用的是sessionAttribute,除了当我让页面放置30分钟或更长时间时,一切正常。然后我得到一个春季帮助捕捉会话超时

org.springframework.web.HttpSessionRequiredException

告诉我,我的目标不是在会议上找到。

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

没有登录要求,我已经检查对象是否为空。

任何建议,将不胜感激。

感谢

回答

7

您可以添加错误页面结合HttpSessionRequiredException将重定向到第一页在应用程序中

例如:

的web.xml

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

您能举个例子吗? – blong824 2011-04-12 22:30:59

+0

我发布了我的建议 – smas 2011-04-12 22:35:08

+0

感谢这看起来像它的工作。我只是想让我的错误页面正确映射。从我注意到的情况来看,它看起来会通过spring调度器servlet映射回来,所以我需要在我的一个控制器中添加映射以访问此页面? – blong824 2011-04-13 20:16:40

0

有是不是你可以只重定向“回到同一页面”。你的会话不见了,这就是你在客户端上的cookie不再对应于servlet容器中的任何会话,因为会话对象已从内存中删除。完全不可逆转。

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

的web.xml:

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

会给你2小时空闲会话。

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

P.S.如果你没有了会话,只想立即建立另一个会话,你总是可以在一个过滤器中完成它,不管是否是Spring。春天可能有自己的听众。您必须在全新的会话中添加一些内容才能使您的请求有效。