存储登录用户Id的最佳方法



我有一个使用JSF 1.1的小应用程序。它使用NTLM进行身份验证。

什么是最好的方法来存储已登录的user_id,以便可以在所有java类的应用程序中使用,user_id将被用于几乎所有jsf页面对应的java类。

任何帮助我都非常感激。

谢谢

将其存储在web会话中:

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

这取决于您如何执行身份验证。如果您通过使用FORM、BASIC或DIGEST身份验证将身份验证过程委托给容器,那么您可以使用以下代码片段获得与当前请求关联的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对象与用户与应用程序的会话具有相同的生存期。

相关内容

  • 没有找到相关文章

最新更新