2011-07-31 205 views
3

我已經被一位自由職業者朋友問及他加入了JSF 2.0項目,並且我正在慢慢提高速度並將它們放在一起。來自Windows Forms .NET世界,我有很多東西要學會說。保護JSF應用程序

我主要關心的是在如何保護JSF應用程序方面缺乏明顯的共識。在這裏提出了一些方法,包括使用Spring安全性,Seam安全性,自定義階段監聽器,或者僅僅使用rendered="#{...}"屬性來顯示/隱藏基於用戶認證的組件。

我試圖實現其中的一些方法,例如Spring安全性,只是發現它很容易被JSF導航機制擊敗而不是重定向到視圖。換句話說,如果用戶直接鍵入受保護頁面的URL,Spring安全性將會正常工作,但如果h:commandButton的操作將他帶到那裏,Spring安全性將無法正常工作。

鑑於此,有人建議使用"faces-redirect=true"強制重定向,但我們認爲這可能會成爲性能問題,因爲這會導致每次從瀏覽器發出2次請求。

另一方面,我放棄了在獲得如此多的缺失依賴關係錯誤後試圖實施Seam安全性。

迄今爲止發現的最佳解決方案是從Duncan Mills - Effective Page Authorization In JavaServer Faces開始的自定義階段偵聽器,但我不完全相信這應該用於面向公共的JSF應用程序。

最後,這是什麼讓我們留下了什麼?我知道這是一個非常廣泛的開放式問題,但我真的不知道下一步該去哪裏。我很確定我已經按照不同的教程來寫了這封信,例如Spring教程,但我仍然不滿意它的工作方式。

任何人都至少可以證實/弱化Spring安全性應該跨JSF轉發的事實,因爲我看過其他人有很多帖子都有相同的問題嗎?這至少會給我一個繼續前進的方向。

謝謝。

回答

0

當我使用JSF時,我使用了spring-security。

關於你評論春季安全允許使用命令按鈕完成重定向的行爲是奇怪的,你必須有一個錯誤的配置,因爲它接縫工程罰款在我的項目(我剛剛測試)罰款。

在任何情況下,您還可以使用spring security標籤根據用戶角色呈現或不呈現組件。

這是一個可以幫助您實現標籤的項目。 http://www.dominikdorn.com/facelets/

希望這有助於..

3

法相結合的頁驗證(施加於面的servlet),身份會話bean Servlet過濾器的(存儲用戶屬性例如角色,登錄ID)和用於檢查授權的一些​​方法(例如,isAdmin(),canViewRecord(recordID))在整個頁面中都有效。

你看,當涉及到安全性時,我選擇不把它留在任何人的手中。另外,我在幾個地方驗證(隱藏組件不會阻止人們僞造正確的POST請求來觸發特定的bean方法,所以請注意)。

+0

這幾乎是我如何做,可以簡單和安全。 –