10

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

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

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

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

4

6 回答 6

5

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

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

于 2015-07-08T07:47:18.573 回答
2

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

于 2008-09-16T02:03:45.137 回答
2

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

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

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

于 2008-09-30T15:25:22.937 回答
0

尝试面向方面的编程框架。

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

于 2008-09-16T02:04:03.453 回答
0

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

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

于 2008-09-16T10:28:45.237 回答
0

我刚刚了解了一个名为 Spring Data JPA 的新 Spring 项目,它提供了基于 AOP 的审计功能。它还不是 GA,但值得关注。

于 2011-02-10T22:16:21.440 回答