讓我通過承認這是我的第一個Web應用程序和第一次使用JSF的經驗來做到這一點,所以我可能做出了一些糟糕的設計決定。將一次性「供應」過程與JSF結合在一起?
下面是我想要做的: 我有一個web應用程序使用JSF 2.0,它可以通過Facebook的畫布訪問。這個網絡應用程序允許用戶查看/操作來自傳感器讀數數據庫的數據。 Facebook用戶第一次訪問我的應用程序時,我要求用戶輸入數據庫的登錄憑據,然後將用戶發送到主頁。此後,用戶應該總是直接進入主頁,因爲我將用戶的FB ID與數據庫用戶配置文件相關聯。
當前實現: 我有Facebook的畫布URL到servlet。此servlet檢查Facebook傳遞的signed_request參數以獲取用戶標識,然後查看數據庫以查看用戶是否已完成供應過程。如果用戶這樣做了,他將被重定向到應用程序主頁。
問題: 我的大多數邏輯做這些檢查目前存在於一個託管bean(會話範圍)內。爲了在servlet中使用bean,我手動實例化bean並將其添加到會話中,因爲JSF框架還沒有機會創建它。由於我的系統變得越來越複雜,由於各種bean之間的依賴關係,這導致了問題。此外,這似乎是一個通常不好的方法來解決這個問題。
解決方案?從我的網頁搜索中,聽起來好像有幾種方法可以做到這一點。一種方法是將畫布設置爲JSF登錄頁面,其中託管bean將獲取signed_request參數並驗證用戶是否已完成供應步驟。從那裏,bean將轉發到適當的頁面。另一種可能性可能是有一個渴望的bean可以做同樣的事情,但這看起來「錯誤」。
解決這個問題並堅持「正確的」JSF範式的最好方法是什麼?
在此先感謝!
感謝您的意見!這基本上是一個原型實現,所以在這一點上我不太在意安全性。無論如何,我的應用程序不允許在沒有來自Facebook的有效signed_request的情況下檢索數據,所以我認爲我現在很安全。談到生產代碼,我會研究一個更強大的安全機制。 – mohlendo 2012-02-18 08:18:06