2011-07-20 37 views
0

我有使用JSF 1.1的小應用程序。它使用NTLM進行身份驗證。存儲登錄用戶ID的最佳方法

什麼是最好的方法來存儲登錄user_id,以便可以在所有java類的應用程序中使用,user_id將用於幾乎所有的jsf頁面相應的java類。

任何幫助是非常可觀的。

感謝

回答

1

其存儲在Web會話:

session=FacesContext.getExternalContext().getSession(); 
session.setAttribute("user_id",user_id); 
+0

爲了在需要將其寫入數據庫或用於任何其他目的的所有bean中調用此會話值,是否需要在我的應用程序中放入一些常用類,以便可以從任何地方引用它? – user75ponic

+0

是的,也許有一個Context類有一個靜態方法getContextSession(),它會返回你的會話對象:Context.getContextSession() – othman

1

:這取決於你如何進行認證。如果要委託認證處理到容器上,通過使用FORM,基本或摘要驗證,則可以得到用下面的代碼片斷當前請求相關聯的Principal對象:

Principal user = FacesContext.getCurrentInstance().getExternalContext().getUserPrincipal(); 

用戶的名稱該領域可以使用user.getName()方法獲得。在引擎蓋下,容器將Principal對象存儲在HttpSession實例中,但在大多數容器中,這不能作爲使用HttpSession.getAttribute(...)方法的屬性訪問。

當調用EJB的業務方法時,Principal對象也會由Servlet容器自動傳播到EJB容器,並且您可以使用SessionContext接口訪問它。在EJB,您可以執行以下,以獲得校長參考:

@Resource 
private SessionContext ctx; 

public void businessMethod() 
{ 
    Principal user = ctx.getCallerPrincipal(); 
    ... 
} 

如果不委託認證的容器,而是,你用你自己的方式進行身份驗證,則必須成功驗證後,將引用存儲到HttpSession對象中的用戶身份,並且您必須在會話失效時清除此內容。不建議將它存儲在其他作用域中,因爲只有HttpSession對象與用戶與應用程序的會話具有相同的生命週期。

+0

我不會使用EJB的。你能否提供一些關於如何存儲在HTTPSession對象上的示例? – user75ponic

+0

@Polappan,它在另一個答案中提供。 –