为什么我的 FacesContext.getCurrentInstance().getExternalContext()



>我有一个无状态的bean,它有一个方法,我想在其中获取当前/登录的用户。我的代码来获取它:

Principal p1 = FacesContext.getCurrentInstance().getExternalContext().getUserPrincipal();

但是我对此收到空指针异常。为什么?

或者有没有其他方法可以获取登录的用户?我正在使用网络逻辑。

你不应该在 EJB 中获取FacesContext。更重要的是,你的 EJB 应该完全不受任何 JSF 依赖的影响。换句话说,您不应该在 EJB 中从包javax.faces.*导入任何代码。你的EJB应该这样设计,它们可以在你能想到的所有不同的前端上重用,比如JSF,JAX-RS,Struts,Spring-MVC,甚至是"普通的"Servlets。

如果您使用的是容器托管安全性或像 Apache Shiro 这样的安全框架,那么您应该使用 API 提供的工具。在"普通"容器托管安全性(JAAS通过web.xml等)的情况下,您应该从SessionContext(正确地来自javax.ejb包)获取它,可以作为@Resource注入。

@Resource
private SessionContext context;
public void doSomething() {
    Principal principal = context.getCallerPrincipal();
    // ...
}

另一种方法是将登录用户的 JPA 实体表示形式作为方法参数传递。

验证以下库的导入:

javax.faces.bean.SessionScoped;

再试一次

相关内容

  • 没有找到相关文章

最新更新