2013-03-06 36 views
1

處理髮布到Java Servlet的表單驗證的一種策略是在驗證失敗時轉發回原始JSP視圖。這允許用戶看到他們剛剛提交的表單(可能他們沒有爲必填字段提供值)的上下文中存在驗證失敗,然後他們可以重試。但是,由於該策略不遵循着名的Post-Redirect-Get模式(http://en.wikipedia.org/wiki/Post/Redirect/Get),因此瀏覽器歷史現在包含不可書籤的頁面。如果用戶稍後嘗試通過歷史記錄/後退按鈕訪問此頁面,則它們將獲得文檔過期異常(至少在Firefox 19中)。這應如何處理?有沒有更好的辦法?Servlet轉發後驗證失敗和Post-Redirect獲取

注意:我正在描述的策略實際上是在Servlet信息頁面中推薦的:(https://stackoverflow.com/tags/servlets/info)。雖然沒有提到瀏覽器歷史問題。 (JSF PRG with validation error)。它建議在帖子中使用AJAX。如果這是推薦的策略,也許我們需要更新Servlet wiki?不完全確定這將如何從JSF轉換爲servlet。

回答

1

據我可以告訴前進驗證失敗的方法是有缺陷的,不應該使用。請使用以下其中一個:

  1. 在會話中存儲驗證錯誤消息並執行重定向。

  2. 使用Ajax提交表單

  3. 捕獲所有驗證錯誤的JavaScript客戶端上,並把該到達服務器應用程序錯誤驗證失敗,並承擔某人發送到服務器上,無需使用申請表或申請表有一個錯誤。如果轉發到錯誤頁面,您將遇到同樣的問題,但攻擊者應該擁有一個瀏覽器歷史記錄。如果會話可用,則可以在會話中填充錯誤消息並執行重定向。無論哪種方式,它都會在「正常」操作中從服務器中刪除驗證,並稍微迴避這個問題。

+0

您能否介紹一下它爲何存在缺陷。 – 2014-06-23 07:57:20

+1

@「Jafar Ali」問題在於瀏覽器歷史記錄,並確保該歷史記錄中的所有頁面實際上都是可書籤的頁面,而不是在發佈後返回的頁面,因爲這會導致許多現代瀏覽器中的過期頁面消息。 – Ryan 2014-06-23 13:39:28