在 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中添加安全漏洞检查的最佳方法。