Spring + Hibernate 审计(无Spring 数据)

Spring + Hibernate auditing (no Spring Data)

我加入了一个用 Spring 和 Hibernate 敏捷方法构建了一年的项目,它没有使用 Spring 数据并且有自己的用户 class(不是 org.springframework.security.core.userdetails.User 的后代)。

审计作为一项新功能出现,即将实施。 (仅记录调用了哪些控制器是不够的,我们必须记录每个数据库字段的更改,以及哪个用户进行了更改。一个控制器可能会导致很多数据库字段发生更改。)我有哪些选择?

我一直在研究 Javers、Envers 和 Audit4j。 Javers 需要 Spring 数据,所以它出来了。 Envers 唯一的要求是 Hibernate,它是 statisfied,但我仍然没有看到用户对象将如何从控制器传递给它(用户的身份验证令牌在请求对象中)。

Hibernate Envers 只为您提供版本控制(某个对象在什么时候发生了什么),但它不能帮助您确定是谁进行了更改。

who-part 的一个简单解决方案是在所有应审计的对象上创建两个新字段(即在基础 class 中,例如 AbstractAuditableEntity):User createdBy;User lastModifiedBy;.添加两个方法(我假设您在这里使用 Spring 安全):

@PrePersist
protected void setCreatedBy() {createdBy = (User)SecurityContextHolder.getContext().getAuthentication().getPrincipal();}

@PreUpdate
protected void setCreatedBy() {lastModifiedBy = (User)SecurityContextHolder.getContext().getAuthentication().getPrincipal();}