我想在我的网络项目中实施审计。基本上,我的应用程序由调用 EJB 项目 (JAR) 中的方法的 Web 项目 (WAR) 组成,所有内容都包装在一个 EAR 中,该 EAR 部署在一个容器中(Jboss 和可能在不久的将来的 Websphere)。
所以,我得到了 web 端的用户会话和 ejb 端的实体和 DAO。我想对某些用户事务实施审计程序,因此数据状态应与执行更改的用户的 ID 一起保存在数据库中。
我可以轻松地将每次调用的用户 ID 传递给 EJB 端,并从业务方法中执行审计,但这会使我的业务和客户端方法变得混乱。
我研究过Hibernate Envers,这是一个非常有趣的审计框架,但它不会审计开箱即用的用户 ID。所以我进一步查看并找到了这篇文章,它解释了如何使用RevisionListener从会话中获取用户 ID 并将其存储在数据库中。但是,它似乎在 EAR 架构中不起作用,原因如下:此 RevisionListener 使用 FacesContext.getCurrentInstance() 从会话中获取用户 ID,因此这意味着 RevisionListener 应该位于 Web 端应用程序,而不是在 EJB 端...
好吧,我希望我已经足够清楚了:)
干杯!