Java 存储登录用户Id的最佳方法
我有一个使用JSF1.1的小应用程序。它正在使用NTLM进行身份验证 存储登录的用户id的最佳方法是什么,这样就可以在所有java类的应用程序中使用,用户id几乎可以在所有jsf页面对应的java类中使用 任何帮助都是值得赞赏的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); 这将取决于您执行身份验证的方式。如果使用表单
谢谢将其存储在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,它在另一个答案中提供。