【问题标题】:Custom audit logging vs Hibernate Envers自定义审计日志与 Hibernate Envers
【发布时间】:2020-11-17 19:56:59
【问题描述】:

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

用户 REQUESTED_ACTION REQUEST_TIME 详细信息 ----- ---- ------------ --------- 约翰 登录 2020-10-10 10:10 ----- John 创建评估 2020-10-10 10:12 AssessmentDay:...,结果:成功

DETAILS 列将包含与操作相关的信息,例如操作的输入和输出。此列对于每个操作都会有所不同,它可能包含JSON、XML 或任何其他格式的文本,没关系。我看到这里出现了几个问题。第一个是它需要在开发人员方面做很多工作,我。我可以在@Controller 或@Service 类中应用Spring AOP 来构建DETAILS 和其他列并保存信息,但仍然不确定这是否是一个好的解决方案。我也在考虑使用 Envers 并将Envers 审计表转换为用户希望看到的上表。我不确定这是否可能。另一种选择是按原样使用Envers 并向用户介绍实体。我将不胜感激。

【问题讨论】:

  • 我在两个项目中实现了 envers。 Envers 基本上为您提供了每个实体的审核表,如果您使用 modifyflag=true,它还会向您显示哪个字段在哪个构建中发生了更改。但是,如果你想把它翻译成人类可以理解的形式(就像 Jira 那样),你必须为每一个变化编写自己的逻辑。示例 - 如果字段“状态”已更改,则显示“状态”已更改。但是如果添加了新笔记,则必须说“未添加新笔记”(新笔记没有变化”。因此,更好的解决方案是使用 envers 并教育他们如何使用它
  • @SridharPatnaik 感谢您的宝贵意见。您是否为您的用户提供了一个用户界面来查看审计表,或者他们是否使用 MySQL 工作台等 SQL 客户端?
  • @SridharPatnaik Jira 是否为每个操作提供广泛的详细信息?我认为他们提供的是诸如 IP 地址之类的详细信息。例如,请参阅this page。我相信,除了 Envers,我还可以提供 Jira 之类的简短摘要来取悦管理员。
  • 我提供了一个基本界面,他们使用该界面只是为了查看重要实体的历史记录,例如客户详细信息、活动详细信息等。
  • 对于您的第二条评论,是的。您可以提供像 Jira 这样的简短摘要来取悦管理员。但这必须手动编写。我不认为 envers 有任何这样的能力。流程将是 -> 使用垂直或水平查询从环境中获取数据 -> 识别更改的字段 -> 从先前版本中获取旧值 -> 编写代码以转换为短 cmets

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2022-12-14
    • 2023-03-24
    • 1970-01-01
    • 2021-01-26
    • 2015-12-14
    • 2015-01-21
    • 2015-04-16
    • 2018-04-18
    • 2018-09-19
    相关资源
    最近更新 更多