我想在我的网络项目中实施审核。基本上,我的应用程序由调用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端......
嗯,我希望我已经让自己足够清楚:)。
干杯!
答案 0 :(得分:1)
如果您已经拥有包含业务逻辑的无状态会话bean ,那么经过身份验证的用户的名称已经传递到您的EJB
您可以使用sessionContext.getCallerPrincipal()
获取主叫用户的姓名。
要求
login-config
(在web.xml
中定义)security-domain
(jboss.xml
);其他应用程序服务器应具有类似的模式来实现登录/身份验证