2013-08-16 66 views
0

我想限制直接訪問我的應用程序中的某個頁面。只有當用戶被應用程序重定向到這些頁面時,才能訪問這些頁面。防止直接訪問JSF中的某個頁面

所有的重定向都是通過ExternalContext#redirect(url)方法完成的。

用戶可以使用後退和前進按鈕,也可以通過按F5或瀏覽器的刷新按鈕刷新頁面。我想要的是用戶無法保存或收藏某些網頁的網址,也無法複製這些重新分配的網址並粘貼到瀏覽器的地址欄中去。

以下是本案例:

  • 說,我第-A和頁面-B。
  • 從Page-A對頁面B進行重定向。
  • 用戶可以回到Page-A,並可以通過瀏覽器的後退和前進按鈕再次回到PageB。
  • 用戶可以刷新頁面B,他/她將留在頁面B中。
  • 用戶不能複製Page-B的URL並在以後訪問(在新標籤頁或書籤中)。

可行嗎?任何指針都會對我非常有幫助。

回答

0

我不認爲你可以從JSF做到這一切。
你明顯的選擇是使用Javascript。
我從來沒有使用Javascript在瀏覽器中使用禁用書籤選項的概念。但是,如果您在新窗口中打開頁面,則始終可以禁用地址字段。

0

您可以

JSF導航處理程序解決它 - 設置從以前的一些網頁會話屬性和一段時間的計時器到期後的價值。從Handler impl中檢查屬性的值並限制訪問,例如如果值不存在,則重定向到其他頁面。

您可以使用web框架實現類似的行爲。實施受控導航是大多數WEB FX的基本特徵,例如JBoss Seam會話或Spring Web Flow控制的導航實現。

+0

我曾想過計時器。但我怎麼能確定它到期時間?用戶可以使用瀏覽器的後退和前進按鈕,甚至刷新頁面。如果計時器在此操作之前到期,顯然自定義處理程序會將用戶重定向到其他頁面。不是嗎? –

+0

沒錯,但是你的要求是這樣的:「用戶不能複製Page-B的URL並在以後訪問它(在新標籤頁或書籤中)」。 - 所以根據這個規範,很明顯,你需要定義和實現'稍後的時間'......(順便說一下:即使你沒有定義它,你總是會在服務器端有HTTP會話超時)如果你只想要檢查'URL複製和書籤'是JavaScript(browser.location attr),但這很容易破解客戶端代碼... –