我有一个无状态 bean,它有一个方法,我想在其中获取当前/登录的用户。 我的代码来获取它:
Principal p1 = FacesContext.getCurrentInstance().getExternalContext().getUserPrincipal();
但是我遇到了空指针异常。这是为什么?
或者还有其他方法获取登录用户吗? 我正在使用 weblogic。
最佳答案
您不应该获取 EJB 中的 FacesContext
。更重要的是,您的 EJB 应该完全摆脱任何 JSF 依赖性。换句话说,您不应该从 EJB 内的 javax.faces.*
包导入任何代码。您的 EJB 的设计方式应该是它们可以在您能想到的所有不同前端(例如 JSF、JAX-RS、Struts、Spring-MVC 甚至“plain vanilla”Servlet)中重用。
如果您使用容器管理的安全性或 Apache Shiro 等安全框架,那么您应该使用 API 提供的工具来实现这一点。如果是“普通”容器管理的安全性(通过 web.xml
等 JAAS),您应该从 SessionContext
获取它。 (正确地来自 javax.ejb
包),可以作为 @Resource
注入(inject)。
@Resource
private SessionContext context;
public void doSomething() {
Principal principal = context.getCallerPrincipal();
// ...
}
另一种方法是将登录用户的 JPA 实体表示作为方法参数传递。
关于jsf - 为什么我的 FacesContext.getCurrentInstance().getExternalContext().getUserPrincipal() 代码运行到 NullPointer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19772780/