我有一个@Stateless
看起来像这样的简单 EJB(去掉了所有日志记录和错误处理):
@Stateless
public class CurrentUserBean {
@PersistenceContext
private EntityManager em;
@Produces @Named @LoggedIn
@SessionScoped
public User produceCurrentUser() {
Principal principal = Faces.getExternalContext().getUserPrincipal();
String username = (principal == null ? null : principal.getName());
return em.createNamedQuery("findByLogin", User.class)
.setParameter("login", username)
.getSingleResult();
}
}
当用户使用 JSF 登录时工作正常。但是同一个用户也可以通过 web 服务进行身份验证,我可以(需要?)从SecurityContext
由 JAX-RS 控制的 bean 中获取用户主体(在我的情况下是 resteasy):
public User doAuth(@Context SecurityContext ctx) {
return em.createNamedQuery("findByLogin", User.class)
.setParameter("login", ctx.getUserPrincial().getName())
.getSingleResult();
}
如何统一这些方法,使当前用户对象的生成仅由一个类负责?