在 Java 中,当使用 Hibernate 进行 CRUD 时,我们如何从初始 Resteasy 请求中访问 Header 值

in Java when Using Hibernate for CRUD how could we access a Header value from the initial Resteasy request

我需要 Java 专家的帮助。

我想存储 用户 如何使用 Hibernate 的 @PreUpdate.

修改数据库字段中的记录 table

用户名由反向代理在 header 字段 x-remote-user 中设置。我可以访问它,如下所示

@GET
@Path("/getuser")
public String get( @HeaderParam("x-remote-user") String userName) {
  return userName;
}

有没有办法在我的 JPA 实体 bean 中注入 @HeaderParam?我应该查找反射吗?

这没有用:

@Entity
@Table(name = "t_companies")
public class TBusiness extends PanacheEntityBase {
  @Column(name = "company_name", nullable = true)
  public String companyName;
  @Column(name = "updated_by", nullable = true)
  public String updatedBy;
  
  @PreUpdate
  public void preUpdate(@HeaderParam("x-remote-user") String userName) {
    updatedBy = userName;
  }
}

让我重新表述我的问题

我正在使用 Panache 数据 REST CRUD 生成

有没有办法从 @RequestScoped class

访问保存用户名的 header 值

然后在 @PreUpdate 上的 JPA 实体中使用这个值?

通过添加 undertow 依赖项使其工作:

    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-undertow</artifactId>
    </dependency>

然后在 EntityListener class 下面创建 PrePersist 方法:


@RequestScoped
// @Path("api/v1/Header")
public class AuditingEntityListener {
  private static final Logger LOG = Logger.getLogger(AuditingEntityListener.class);

  // Inject the bean so that Quarkus does not remove it at build time (IMPORTANT)
  @Inject
  HttpServletRequest requestNotUsed;

  @PrePersist
  void onPrePersist(TBusiness myEntity) {
    HttpServletRequest HSR = CDI.current().select(HttpServletRequest.class).get();
    LOG.info("HSR getRequestHeader user: " + HSR.getHeader("x-remote-user"));
  }
}