Java 用EJB注入用户实体
我在应用程序中使用JAAS身份验证。假设我有这样的用户实体类: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;
@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,这显然是可操作的)