我有一个无状态 bean,它有一个方法,我想在其中获取当前/登录的用户。我得到它的代码:
Principal p1 = FacesContext.getCurrentInstance().getExternalContext().getUserPrincipal();
但是我得到了空指针异常。这是为什么?
或者有没有其他方法可以获取登录用户?我正在使用网络逻辑。
我有一个无状态 bean,它有一个方法,我想在其中获取当前/登录的用户。我得到它的代码:
Principal p1 = FacesContext.getCurrentInstance().getExternalContext().getUserPrincipal();
但是我得到了空指针异常。这是为什么?
或者有没有其他方法可以获取登录用户?我正在使用网络逻辑。
您不应该FacesContext
在 EJB 中获取。更重要的是,您的 EJB 应该完全没有任何 JSF 依赖项。换句话说,您不应该从javax.faces.*
EJB 中的包中导入任何代码。您的 EJB 应该被设计成可在您能想到的所有不同前端(例如 JSF、JAX-RS、Struts、Spring-MVC 甚至“普通的”Servlet)中重用。
如果您使用的是容器管理的安全性或像 Apache Shiro 这样的安全框架,那么您应该为此使用 API 提供的工具。在“普通”容器管理安全性(JAAS via等web.xml
)的情况下,您应该获得可以注入为.SessionContext
javax.ejb
@Resource
@Resource
private SessionContext context;
public void doSomething() {
Principal principal = context.getCallerPrincipal();
// ...
}
另一种方法是将登录用户的 JPA 实体表示作为方法参数传递。
验证以下库的导入:
javax.faces.bean.SessionScoped;
再试一次