gpt4 book ai didi

jsf-2 - @Produces 为JSF2 和JAX-RS 中的当前用户对象?

转载 作者:行者123 更新时间:2023-12-02 00:04:16 24 4
gpt4 key购买 nike

我有一个简单的 @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 登录时工作正常。但是同一用户也可以通过网络服务进行身份验证,我可以(需要?)从 JAX-RS 控制的 bean 中的 SecurityContext 获取用户主体(在我的例子中是 resteasy):

public User doAuth(@Context SecurityContext ctx) {
return em.createNamedQuery("findByLogin", User.class)
.setParameter("login", ctx.getUserPrincial().getName())
.getSingleResult();
}

如何统一这些方法,使当前用户对象的生成仅由一个类负责?

最佳答案

CDI 允许您直接注入(inject) Principal。只需这样做:

@Inject Principal userPrincipal;

那将有用户名。

关于jsf-2 - @Produces 为JSF2 和JAX-RS 中的当前用户对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19376281/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com