我加入了一个使用Spring和Hibernate使用敏捷方法构建的项目,该项目不使用Spring Data并且具有自己的用户类(不是org.springframework.security.core.userdetails.User
的后代)。
审计是要实施的新功能。 (仅记录调用哪个控制器是不够的,我们必须记录每个DB字段的更改以及哪个用户进行了记录。一个控制器可能导致很多DB字段发生更改。)我有哪些选择?
我一直在看Javers,Envers和Audit4j。 Javers需要Spring Data,因此已经淘汰。 Envers的唯一要求是已休眠的Hibernate,但我仍然看不到如何将用户对象从控制器传递给它(用户的auth令牌位于请求对象中)。
最佳答案
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();}