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

Custom audit logging vs Hibernate Envers

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

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 或任何其他格式的文本,这无关紧要。我看到这里出现了几个问题。第一个是它需要在开发人员方面做大量工作,我。我可以在 @Controller@Service 类 中应用 Spring AOP 来构建 DETAILS 和其他列并保存信息,但仍然不确定这是否是一个好的解决方案。我也在考虑使用 Envers 并将 Envers 审计 table 翻译成用户希望看到的 table 以上。我不确定这是否可能。另一种选择是按原样使用 Envers 并向用户介绍实体。我将不胜感激。

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

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