2

请我需要 Java 专家的帮助。

我想存储用户如何使用 Hibernate 修改数据库表字段中的记录@PreUpdate

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

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

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

这没有用:

@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类中的用户名的标头值

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

4

1 回答 1

0

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

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

然后在EntityListener下面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"));
  }
}
于 2021-01-25T13:39:03.963 回答