2012-05-30 37 views
0

我有一個EJB 3應用程序作爲服務層,Tapestry 5 Web應用程序作爲它的客戶端。 EJB應該提供一個供Web應用程序使用的會話外觀。EJB3安全性:如何跟蹤登錄用戶?

要執行EJB層中定義的操作,用戶需要通過Web界面登錄。我必須具有實體級別的安全性,因此Java EE聲明式安全對我來說沒有多大用處。

我應該如何在這種設置中實現安全性?我寧願讓它在EJB層上實現,然後在Web應用程序中,以便切換客戶端。

我可以使用Web應用程序中的http會話來存儲用戶會話,然後在每個無狀態EJB調用中傳遞User對象。

public void doStuff(params, User user); 

是否有狀態會話bean是這裏的解決方案?

編輯:通過實體級安全我的意思是行級安全。

回答

1

實體級別安全性的含義是什麼?

如果我的理解正確,您可以直接從您的Web應用程序中使用登錄用戶調用您的SLSB?

如果是這樣的話: 編寫一個獲取SessionContext注入爲一個資源的注入器,並使用此Interceptor註釋您的SLSB ......在Interceptor的@AroundInvoke中從SessionContext獲取Principal並從那裏執行任何您想要的操作例如,查詢用戶的數據庫,如果有什麼錯誤,直接從攔截器中引發一個異常,而不將它傳遞給SLSB)。