2013-02-06 134 views
0

我們以非常簡單的方式使用JSF。我們正在做的是實現包含一些Java代碼的標籤。JSF重定向不會停止頁面呈現

我已經實現了「安全」標籤發送302重定向回到登錄頁面當用戶沒有登錄:

// make them log in 
ctx.getExternalContext().redirect("login.xhtml"); 
ctx.responseComplete(); 

麻煩的是,重定向()方法不停止正在呈現的頁面的其餘部分。進一步在頁面下方的標籤正在執行。這是一個問題,因爲如果瀏覽器忽略重定向,未登錄的用戶可能會看到他們不應該看到的內容。

如何獲得responseComplete()來完成我認爲應該做的事情?

+0

http://stackoverflow.com/questions/8480100/how-implement-a-login-filter-in-jsf – elciospy

回答

0

也許您可以使用標誌來驗證用戶是否已登錄。
然後,您可以在不想呈現的標記中使用render=#{managedBean.logged}屬性。
這只是一種解決方法......對於您提供的大量信息無法真正幫助您。

1

它總是更好地實現登錄相關的邏輯在Servlet過濾器,象下面這樣:

  1. 實施要確保
  2. 在過濾器的URL模式過濾器,檢查用戶是否已登錄(可能只是檢查用戶會話中是否存在用戶名/用戶ID)
  3. 如果用戶未登錄,則將用戶重定向到基於HTML的登錄頁面。
  4. 如果用戶登錄,讓用戶訪問資源。

有很多方法(可能會比這更好)來實現這一點,但這是最基本的方法。

+0

是,更好地利用由JSF –

+0

提供faces-config.xml中的這是我們原來是這樣做的。麻煩的是不應該保護一些路徑,如/login.xhtml和/ images/*。保持清單很醜陋。通過這個方案,我可以將一個標籤放在所有安全頁面的通用標頭中。 – ccleve

+0

您只能保護您的(動態)頁面並顯示安全內容。保護靜態資源,如圖像,CSS,JS可能會被跳過。在過濾器中,添加一個條件以繞過登錄頁面。 – Apurv

0

試試吧!

ctx.getExternalContext().dispatch("login.xhtml"); 
ctx.responseComplete();