2011-04-12 114 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。春天可能有自己的聽衆。您必須在全新的會話中添加一些內容才能使您的請求有效。