使用用户ID进行JPA审核

时间:2013-08-08 15:24:24

标签: hibernate jsf ejb ear hibernate-envers

我想在我的网络项目中实施审核。基本上,我的应用程序由调用EJB项目(JAR)中的方法的Web项目(WAR)组成,所有内容都包含在EAR中,该EAR部署在容器中(Jboss,可能在不久的将来可能是Websphere)。

所以,我在网络端获得了用户会话,在ejb端获得了实体和DAO。我想对一些用户事务实施审计程序,因此数据状态应该与执行更改的用户的id一起保存在数据库中。

我可以轻松地在每次调用EJB端时传递用户ID,并在业务方法中执行审计,但这会使我的业务和客户端方法混乱。

我查看了Hibernate Envers,这是一个非常有趣的审核框架,但它没有审核开箱即用的用户ID。所以我进一步查看了this post,其中解释了如何使用 RevisionListener 从会话中获取用户ID并将其存储在数据库中。但是,由于以下原因,它似乎不适用于EAR体系结构:此RevisionListener使用FacesContext.getCurrentInstance()以从会话中获取用户ID,因此这意味着RevisionListener应位于Web端应用程序,而不是EJB端......

嗯,我希望我已经让自己足够清楚:)。

干杯!

1 个答案:

答案 0 :(得分:1)

如果您已经拥有包含业务逻辑的无状态会话bean ,那么经过身份验证的用户的名称已经传递到您的EJB

您可以使用sessionContext.getCallerPrincipal()获取主叫用户的姓名。

要求

  • 网络应用使用login-config(在web.xml中定义)
  • JBoss Web应用程序使用security-domainjboss.xml);其他应用程序服务器应具有类似的模式来实现登录/身份验证