Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 存储登录用户Id的最佳方法_Java_Jsf - Fatal编程技术网

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

Java 存储登录用户Id的最佳方法,java,jsf,Java,Jsf,我有一个使用JSF1.1的小应用程序。它正在使用NTLM进行身份验证 存储登录的用户id的最佳方法是什么,这样就可以在所有java类的应用程序中使用,用户id几乎可以在所有jsf页面对应的java类中使用 任何帮助都是值得赞赏的 谢谢将其存储在web会话中: session=FacesContext.getExternalContext().getSession(); session.setAttribute("user_id",user_id); 这将取决于您执行身份验证的方式。如果使用表单

我有一个使用JSF1.1的小应用程序。它正在使用NTLM进行身份验证

存储登录的用户id的最佳方法是什么,这样就可以在所有java类的应用程序中使用,用户id几乎可以在所有jsf页面对应的java类中使用

任何帮助都是值得赞赏的


谢谢

将其存储在web会话中:

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

这将取决于您执行身份验证的方式。如果使用表单、基本或摘要身份验证将身份验证过程委托给容器,则可以使用以下代码段获取与当前请求关联的
Principal
对象:

Principal user = FacesContext.getCurrentInstance().getExternalContext().getUserPrincipal();
可以使用
user.getName()
方法获取域中的用户名。在引擎盖下,容器将主体对象存储在
HttpSession
实例中,但在大多数容器中,这不能作为属性使用
HttpSession.getAttribute(…)
方法访问

当调用EJB的业务方法时,Servlet容器还会自动将主体对象传播到EJB容器,您可以使用
SessionContext
接口访问它。在EJB中,您可以执行以下操作,以获取对主体的引用:

@Resource
private SessionContext ctx;

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

如果您没有将身份验证委托给容器,而是使用自己的方案执行身份验证,那么在成功身份验证时必须将对用户身份的引用存储在HttpSession对象中,并且在会话无效时必须清除该引用。不建议将其存储在其他作用域中,因为只有HttpSession对象的生存期与用户与应用程序的会话相同。

为了在需要将其写入数据库或用于任何其他目的的所有bean中调用此会话值,我是否需要在我的应用程序中放入一些公共类,以便可以从任何地方引用它?是的,可能有一个上下文类,该类具有一个静态方法getContextSession(),该方法将返回您的会话对象:Context.getContextSession(),我不会使用EJB。您能提供一些关于如何在HTTPSession对象上存储的示例吗?@Polappan,它在另一个答案中提供。