2011-10-06 75 views
0

我正在使用Spring MVC的個人網頁與本地Tomcat 6服務器。我正在使用默認的Tomcat配置(默認情況下會設置eclipse)。Spring/Tomcat 6會話過期問題

在我的控制器(每個頁面使用一個控制器,並創建會話bean以在它們之間傳遞信息)我有兩個方法,一個用於捕獲POST,另一個用於捕獲GET請求方法。頁面邏輯將讓用戶點擊提交按鈕,並使用「重定向:abc.htm」返回將它們發送到新頁面或返回到GET方法。

我沒有明確處理cookies,但確實擁有Session Beans中的所有信息,並且正在使用Spring Security來處理安全/用戶管理。

我有一個彈簧安全配置,可以將用戶重定向回登錄頁面,如果他們沒有被授權。我也有一個ExceptionHandler捕獲HttpSessionRequiredException,雖然這不是我在用戶會話過期時觸發的(它使用我的Spring Security配置的邏輯)。

當會話過期時(我通過Tomcat管理器執行此操作),用戶被重定向回登錄頁面。他們在嘗試做某件事後重定向(點擊提交,或重新訪問除login.htm以外的任何頁面)。

我的問題是,一旦他們回到他們的會話到期的初始頁面,如果在到期時他們點擊了一個提交按鈕,它將他們重定向到最初的頁面並處理提交中的POST事件。

例子:

  1. 用戶登錄,並在主頁上
  2. 用戶會話過期
  3. 用戶的主頁上,點擊提交按鈕
  4. 用戶被重定向回login.htm頁面
  5. 用戶登錄並導航回主頁面。
  6. 而不是遵循主頁面的GET邏輯,它們被視爲主頁面的POST,我不確定POST變量來自哪裏。

有什麼方法可以追蹤這個錯誤來自哪裏,或者究竟是什麼原因造成的?

回答

1

這是由spring-security完成的。在將用戶重定向到登錄頁面之前,Spring Security會將請求細節存儲在會話中。成功登錄後,它將從會話中檢索請求詳細信息並重定向到該請求。

您可以設置form-login配置的always-use-default-target屬性來覆蓋此行爲。

+0

完美的工作。非常感謝。在閱讀default-target-url的文檔後,我可以確切地看到它在哪裏說這是導致錯誤。 – Nicholas