2011-03-02 169 views
2

我有一個篩選器,它可以掃描我的應用程序中的所有請求。我想要阻止請求,如果它請求一個特定的網址。我可以檢查這個,如果條件匹配,我不會做chain.doFilter,但仍然會將請求移到黑色頁面。如何阻止此請求繼續進行並停留在當前頁面 - 意味着用戶不應該看到他點擊的屏幕有任何改變?Servlet請求阻止

回答

1

你不能。瀏覽器已經提出請求,並且已經無法使用。你可能會破解一些JavaScript,它會默默地「點擊」瀏覽器的「返回」按鈕,但毫無疑問,它具有各種令人討厭的問題。

但是一旦瀏覽器發送了請求,當前頁面就「死」了。

2

的HTTP status code 204可能會奏效,但它不能保證所有瀏覽器的工作:

204無內容

服務器已完成要求 但並不需要返回 實體並且可能想要返回 已更新的元信息。響應 可能包含新的或更新的 元信息,其形式爲 實體標題,如果存在 應該與 請求的變體相關聯。

如果客戶是用戶代理,它 不應改變從它的文件視圖 ,其引起 請求被髮送。這種反應主要是 旨在允許輸入用於操作至 發生而不引起的改變 用戶代理的活動文檔視圖, 雖然任何新的或更新 元信息應該在當前應用於 該文檔的用戶 劑的活性視圖。

204響應必須不包括 消息體,且因此是總是通過 頭字段之後的第一空行 終止。

(重點煤礦)

或者,你可以嘗試以下策略之一:

  1. 有這個servlet返回307(臨時重定向)回使用HTTP引用領域的前一頁。這種方法可能會導致緩存和代理問題。
  2. 使用ajax從您的servlet加載內容。你將不得不用直接鏈接來替代啓動Ajax調用的JavaScript調用來替換頁面的一部分。以這種方式加載內容時,瀏覽器中的URL不會更改,這可能會或可能不合意。許多網站使用混合,包括StackOverflow。任何應該是「permalink-able」的東西都會通過常規鏈接導航,但每個頁面的部分內容都是通過ajax懶洋洋地提取的。

最後,告訴用戶鏈接已關閉,這有什麼問題?讓servlet返回403(禁止)。