在 Spring Boot 中处理审计的最佳方法是啥?

Posted

技术标签:

【中文标题】在 Spring Boot 中处理审计的最佳方法是啥?【英文标题】:What is the best way to handle audits in Spring Boot?在 Spring Boot 中处理审计的最佳方法是什么? 【发布时间】:2021-10-26 11:56:57 【问题描述】:

我们跟踪系统中的任何操作,因此我们对侦听任何操作的实体使用@EntityListeners(AuditListener.class)

代码sn-p:

public class AuditListener 

    @Autowired
    private AuditRepository auditRepo; 

    @PrePersist
    public void preSave(Object object) 
        // save audit to database
    

那么最好使用@PrePersist@PostPersist

【问题讨论】:

那么,您想在persist 操作之前还是之后进行审核? 如果实体已成功添加或更新,我想创建审计。那么什么是最好的前置或后置呢? 我会说post。更多信息是here 【参考方案1】:

正如@aksappy 所说,如果您希望在insert 之前或之后进行审核,您必须做出选择。 但是您应该知道@prePersist @postPersist 并不是唯一需要照顾的人。还有@preUpdate@postUpdate。我没有提到@preRemove@postRemove,因为似乎无法审核删除操作(我不确定,因为我自己没有测试过)。

但我不能向您推荐足够多的 Hibernate Envers 一个成熟的库来审计/版本化您的实体。它的设置非常简单,一旦完成,它就可以轻松地在每个实体上使用。它将记录发生的每一次添加、修改和删除。当您还想显示实体发生的历史时,它很有用,一切都由Envers 提供的方法处理。

我建议你看看这个指南https://www.baeldung.com/database-auditing-jpa#hibernate 并自己看看。如果您想尝试,它会向您展示如何设置Hibernate Envers

【讨论】:

Thanx Pilpo 我知道所有的注释,但搜索的是 pre 或 post。 Afaik,pre 或 post 之间没有最佳选择。如果insert 出错,您将遇到异常,代码将停止并且事务将回滚。所以你也不会出错。也许在实体被插入数据库之后audit 更有意义,所以如果你这么认为,你应该使用post。但是不要想太多,无论如何它都会起作用:) 你好,皮尔波。 @EntityListener 会降低应用程序性能吗?我在所有其他类扩展它的父类上使用它。 这完全取决于您的 EntityListener 的工作。如果这是一项繁重的任务,是的,你会对你的表现产生影响。如果不是,别担心,你很好。

以上是关于在 Spring Boot 中处理审计的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何操纵我的审计项目以在 Spring Boot 中持续存在

使用 Thymeleaf 在 Spring Boot 中记录 Activity 的最佳方法是啥?

在spring boot apis中添加安全漏洞检查的最佳方法。

Spring Boot 更新用户数据的最佳方法是啥?

如何跨单个项目的不同 Spring Boot 微服务实现 JPA 审计?

Spring Boot 最佳实践模板引擎Thymeleaf集成