向现有应用程序添加审计的良好模式或框架? [关闭]

Posted

技术标签:

【中文标题】向现有应用程序添加审计的良好模式或框架? [关闭]【英文标题】:Good pattern or framework for adding auditing to an existing app? [closed] 【发布时间】:2010-09-09 06:50:12 【问题描述】:

我有一个现有的 J2EE 企业应用程序,我需要在其中添加审计,即能够记录几个重要域类型(Employee、AdministratorRights 等)的 CRUD 操作。

应用程序具有标准的 n 层架构:

网页界面 业务操作封装在无状态会话 bean 和事务性 POJO 的混合体中(使用 Spring) 持久性是直接 JDBC(来自业务层内)和 EJB 2.x BMP 实体 bean(我知道,我知道)的混合体

我的问题是:是否有任何标准模式或(更好的)框架/库专门用于将审计添加为横切关注点?我知道 AOP 通常可用于实现横切关注点;我想知道是否有专门针对审计的东西。

【问题讨论】:

投反对票的人至少可以发表评论解释原因吗? 【参考方案1】:

现在我倾向于使用 Spring AOP(使用“@AspectJ”样式)来建议暴露于 Web 层的业务操作。

【讨论】:

我也会从这里开始,特别是如果我的应用程序已经在使用 Spring pojos - 应该比尝试不同的 AOP 库更容易添加。【参考方案2】:

试试Aspect Oriented 编程框架。

来自***“面向方面的编程 (AOP) 是一种编程范式,它通过允许分离横切关注点来增加模块化”。

【讨论】:

【参考方案3】:

对于所有 EJB,您可以使用 EJB 3.0 拦截器(这类似于 Servlet 过滤器)和另一个类似的 Spring 拦截器(不熟悉 spring) 当您使用 EJB 以及可能无法涵盖整个事务的 Spring 时。另一种方法可能是使用前端控制器,但这需要在客户端进行一些修改。另一种方法可能是使用 Servlet 过滤器,但这意味着在表示层中实现域逻辑。

在这种情况下我会推荐前端控制器。

【讨论】:

【参考方案4】:

我将在这里有点反对,并建议您查看较低层的解决方案。我们的应用程序中有一个类似的架构,对于我们的审计,我们使用了数据库级审计触发器来跟踪 RDBMS 中的操作。这可以根据您的喜好进行细粒度或粗粒度,您只需确定要跟踪的实体即可。

现在,这不是一个纯粹的意识形态解决方案;它涉及将逻辑放入可以说应该保留在业务层中的数据库中,我不能否认这个视图具有价值,但是在我们的例子中,我们有许多独立的应用程序与数据模型交互,其中一些是用 C 编写的,一些脚本化的应用程序和其他 J2EE 应用程序,所有这些应用程序都必须进行一致的审计。

请注意,在 J2EE 方面可能还有一些 AOP 工作需要完成;任何更新数据库的方法都可能需要做一些额外的工作来告诉数据库哪个用户正在做这项工作。我们使用数据库会话变量来执行此操作,但当然还有其他解决方案。

【讨论】:

【参考方案5】:

我刚刚了解了一个名为 Spring Data JPA 的新 Spring 项目,它提供了AOP-based auditing feature。它还不是 GA,但值得关注。

【讨论】:

【参考方案6】:

也许您应该看看Audit4j,它提供了业务功能的审计并有多个配置选项。 另一个框架是JaVers,它更侧重于审计持久层的低级修改,这可能更符合您的情况。

这两个框架都提供了超越普通 AOP/拦截器的特定于审计的功能。

【讨论】:

以上是关于向现有应用程序添加审计的良好模式或框架? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

向现有 Python 类添加函数的模式

向现有 json 模式添加额外字段并即时生成 c# 类

向现有列添加标识

向现有结构添加元素会使函数在分段错误时崩溃

向现有 Xcode 项目添加尺寸类

[代码审计] LvyeCms CSRF漏洞分析