自定义审核日志记录与Hibernate Envers

时间:2020-07-28 11:28:31

标签: hibernate-envers audit-logging spring-data-envers

我需要为我构建的Web应用程序实施审核日志记录。我在开发中使用Spring BootMySQLJPA (Hibernate)。我知道有Hibernate Envers这样的解决方案可以在实体级别进行审核。问题在于,将检查这些日志的用户(构建的Web应用程序的管理员用户)没有实体的概念,他是根据用户操作来表示的。我的客户要求的是能够检测每个用户执行的每个动作。例如,他想列出最近2天执行的所有操作。他希望看到一个表格,例如:

USER   REQUESTED_ACTION   REQUEST_TIME      DETAILS  
-----  ----------------   ------------      ---------
John   Log in             2020-10-10 10:10  -----
John   Create Assessment  2020-10-10 10:12  AssessmentDay:..., Result:Success

DETAILS列将包含与动作有关的信息,例如动作的输入和输出。此列对于每个操作都会有所不同,它可能包含JSONXML或其他任何格式的文本,这并不重要。我看到这里出现了几个问题。第一个是我需要在开发人员方面进行大量工作。我可以在Spring AOP@Controller类中应用@Service来构建DETAILS和其他列并保存信息,但是仍然不确定这是否是一个好的解决方案。我还考虑使用Envers并将Envers审核表转换为用户希望查看的上述表。我不确定这是否可能。另一种选择是照原样使用Envers并向用户介绍实体。我希望您能提供一些指导。

1 个答案:

答案 0 :(得分:0)

正如您已经或多或少意识到的那样,Envers不是正确的工作工具。 它在您处理用户操作时处理数据库更改,这甚至可能不会导致数据库更改,例如,您以示例为例的“ LOG IN”操作不会触发任何数据库更改。

我看到的选项是控制者或服务的AOP或HandlerInterceptor