我有使用JSF 1.1的小應用程序。它使用NTLM進行身份驗證。存儲登錄用戶ID的最佳方法
什麼是最好的方法來存儲登錄user_id,以便可以在所有java類的應用程序中使用,user_id將用於幾乎所有的jsf頁面相應的java類。
任何幫助是非常可觀的。
感謝
我有使用JSF 1.1的小應用程序。它使用NTLM進行身份驗證。存儲登錄用戶ID的最佳方法
什麼是最好的方法來存儲登錄user_id,以便可以在所有java類的應用程序中使用,user_id將用於幾乎所有的jsf頁面相應的java類。
任何幫助是非常可觀的。
感謝
其存儲在Web會話:
session=FacesContext.getExternalContext().getSession();
session.setAttribute("user_id",user_id);
:這取決於你如何進行認證。如果要委託認證處理到容器上,通過使用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對象與用戶與應用程序的會話具有相同的生命週期。
我不會使用EJB的。你能否提供一些關於如何存儲在HTTPSession對象上的示例? – user75ponic
@Polappan,它在另一個答案中提供。 –
爲了在需要將其寫入數據庫或用於任何其他目的的所有bean中調用此會話值,是否需要在我的應用程序中放入一些常用類,以便可以從任何地方引用它? – user75ponic
是的,也許有一個Context類有一個靜態方法getContextSession(),它會返回你的會話對象:Context.getContextSession() – othman