自定义审计日志记录与 Hibernate Envers
Custom audit logging vs Hibernate Envers
我需要为我构建的 Web 应用程序实施审计日志记录。我在开发中使用 Spring Boot
、MySQL
和 JPA (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
列将包含与操作相关的信息,例如操作的输入和输出。此列对于每个操作都会有所不同,它可能包含 JSON
、XML
或任何其他格式的文本,这无关紧要。我看到这里出现了几个问题。第一个是它需要在开发人员方面做大量工作,我。我可以在 @Controller
或 @Service
类 中应用 Spring AOP
来构建 DETAILS
和其他列并保存信息,但仍然不确定这是否是一个好的解决方案。我也在考虑使用 Envers 并将 Envers
审计 table 翻译成用户希望看到的 table 以上。我不确定这是否可能。另一种选择是按原样使用 Envers
并向用户介绍实体。我将不胜感激。
正如您或多或少已经意识到的那样,Envers 不是完成这项工作的合适工具。
它在处理用户操作时处理数据库更改,这甚至可能不会导致数据库更改,例如您用作示例的“登录”操作不会触发任何数据库更改。
我看到的选项是控制器或服务上的 AOP 或者 HandlerInterceptor
我需要为我构建的 Web 应用程序实施审计日志记录。我在开发中使用 Spring Boot
、MySQL
和 JPA (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
列将包含与操作相关的信息,例如操作的输入和输出。此列对于每个操作都会有所不同,它可能包含 JSON
、XML
或任何其他格式的文本,这无关紧要。我看到这里出现了几个问题。第一个是它需要在开发人员方面做大量工作,我。我可以在 @Controller
或 @Service
类 中应用 Spring AOP
来构建 DETAILS
和其他列并保存信息,但仍然不确定这是否是一个好的解决方案。我也在考虑使用 Envers 并将 Envers
审计 table 翻译成用户希望看到的 table 以上。我不确定这是否可能。另一种选择是按原样使用 Envers
并向用户介绍实体。我将不胜感激。
正如您或多或少已经意识到的那样,Envers 不是完成这项工作的合适工具。 它在处理用户操作时处理数据库更改,这甚至可能不会导致数据库更改,例如您用作示例的“登录”操作不会触发任何数据库更改。
我看到的选项是控制器或服务上的 AOP 或者 HandlerInterceptor