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