Java 用EJB注入用户实体

Java 用EJB注入用户实体,java,rest,jakarta-ee,ejb,cdi,Java,Rest,Jakarta Ee,Ejb,Cdi,我在应用程序中使用JAAS身份验证。假设我有这样的用户实体类: @Entity public class User { @Id public Long id; public String name; ... @Stateless @LocalBean @Path("/users") public class Users { // INJECT USER OBJECT HERE @Inject private User user;

我在应用程序中使用JAAS身份验证。假设我有这样的用户实体类:

@Entity
public class User {
    @Id
    public Long id;

    public String name;

    ...
@Stateless
@LocalBean
@Path("/users")
public class Users {

    // INJECT USER OBJECT HERE
    @Inject
    private User user;

    @Path("/me")
    @Produces({ MediaType.APPLICATION_JSON })
    @GET
    public User getUser() {
        return user;
    }
    ...
还有一个rest API,如下所示:

@Entity
public class User {
    @Id
    public Long id;

    public String name;

    ...
@Stateless
@LocalBean
@Path("/users")
public class Users {

    // INJECT USER OBJECT HERE
    @Inject
    private User user;

    @Path("/me")
    @Produces({ MediaType.APPLICATION_JSON })
    @GET
    public User getUser() {
        return user;
    }
    ...

我是否创建了一个
@products
方法来从
@SessionContext.getCallerPrincipal()
和EntityManager生成用户实体对象,并将其直接注入到我想要的所有rest API中?

当您将用户id保存为原则名称时,以下方法应该有效。 您需要一个和生产者方法。一个好方法是创建另一个类来获取用户实体

public class Resource {
  @Inject
  private EntityManager em;

  @Resource
  private SessionContext ctx;

  @Produces
  @Sessionscoped
  @Running // the qualifier
  public User getUser() {
    User user = em.find(User.class, ctx.getCallerPrincipal().getName());
    return user;
  }
}
Users
类中,必须使用限定符对注入的用户进行注释。否则,无法将生产者方法的用户实体分配给注入

@Inject
@Running
private User user;

什么是
用户
?它是否映射到JSON?我仍然有问题。ctx为null,可能是因为该方法是SessionOpnScoped而不是类。我想将我的用户对象(作为RequestScope作用域)注入Jersey rest API类中(这样我就可以为每个请求提供正确的用户对象)。我做了几天我能想象到的一切,但什么都不起作用:(这不是对主要问题的回答,即:如何将用户信息发送到EJB上下文(实际上,您是从HTTP资源注入ctx,这显然是可操作的)