我有使用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