向现有应用添加审核的良好模式或者框架?

时间:2020-03-05 18:55:00  来源:igfitidea点击:

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

该应用程序具有标准的n层体系结构:

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

我的问题是:是否有专门用于将审计作为跨领域关注点的标准模式或者(更好)框架/库?我知道AOP通常可以用来实现跨领域的关注。我想知道是否有专门针对审核的内容。

解决方案

回答

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

回答

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

维基百科中的"面向方面的编程(AOP)是一种编程范式,它通过允许将交叉的关注点分离而增加了模块化"。

回答

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

在这种情况下,我建议使用前端控制器。

回答

在这里,我将稍作反对,建议我们使用一个较低层的解决方案。我们的应用程序中有一个类似的体系结构,对于审计,我们使用了跟踪RDBMS中操作的数据库级审计触发器。我们可以根据需要进行细粒度或者粗粒度处理,只需识别要跟踪的实体即可。

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

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