我有一个无状态bean,它有一个方法,我想获取当前/已记录的用户。 我得到它的代码:
Principal p1 = FacesContext.getCurrentInstance().getExternalContext().getUserPrincipal();
但是我得到了nullpointer异常。那是为什么?
或者有没有其他方法来获取登录用户? 我正在使用weblogic。
答案 0 :(得分:3)
你不应该抓住EJB中的FacesContext
。更重要的是,您的EJB应该完全不受任何JSF依赖项的影响。换句话说,您不应该在EJB内部从javax.faces.*
包导入任何代码。您的EJB应该被设计为可以在您可以想到的所有不同前端重用,例如JSF,JAX-RS,Struts,Spring-MVC甚至是“普通的Servlet”。
如果您正在使用容器管理的安全性或Apache Shiro这样的安全框架,那么您应该使用API提供的设施。如果是“普通的vanilla”容器管理的安全性(JAAS通过web.xml
等),你应该从SessionContext
(正确地来自javax.ejb
包)获得它,它可以注入@Resource
。
@Resource
private SessionContext context;
public void doSomething() {
Principal principal = context.getCallerPrincipal();
// ...
}
另一种方法是将登录用户的JPA实体表示作为方法参数传递。
答案 1 :(得分:0)
验证以下库的导入:
javax.faces.bean.SessionScoped;
再试一次