Spring + Hibernate审计(没有Spring数据)

时间:2015-11-29 19:07:27

标签: java spring hibernate audit hibernate-envers

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

审计成为一项新的实施计划。 (它不足以记录调用的控制器,我们必须记录每个数据库字段的更改,以及哪个用户执行了操作。一个控制器可能导致许多数据库字段发生变化。)什么是我的选择?

我一直在关注Javers,Envers和Audit4j。 Javers需要Spring Data,所以它已经出局了。 Envers'唯一的要求是Hibernate,它是满足的,但我仍然没有看到User对象将如何从控制器传递给它(用户的身份验证令牌在请求对象中)。

1 个答案:

答案 0 :(得分:1)

Hibernate Envers只为您提供版本控制(在什么时间发生在对象上的事情),但它无法帮助您确定谁做了更改。

who-part的一个简单解决方案是在所有要审计的对象上创建两个新字段(即在诸如AbstractAuditableEntity的基类中):User createdBy;User lastModifiedBy;。添加两个方法(我假设你在这里使用Spring Security):

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

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