Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 使用用户id进行JPA审核_Hibernate_Jsf_Ejb_Ear_Hibernate Envers - Fatal编程技术网

Hibernate 使用用户id进行JPA审核

Hibernate 使用用户id进行JPA审核,hibernate,jsf,ejb,ear,hibernate-envers,Hibernate,Jsf,Ejb,Ear,Hibernate Envers,我想在我的web项目中实现审计。基本上,我的应用程序是由一个Web项目(WAR)组成的,它调用EJB项目(JAR)中的方法,所有内容都封装在一个EAR中,EAR部署在一个容器中(Jboss,不久的将来可能还有Websphere) 因此,我在web端获得了用户会话,在ejb端获得了实体和DAO。我想对一些用户事务实现一个审计过程,因此数据状态应该与执行更改的用户id一起保存在数据库中 我可以轻松地将每次调用的用户id传递到EJB端,并从业务方法中执行审计,但这会使我的业务和客户机方法变得混乱 我已

我想在我的web项目中实现审计。基本上,我的应用程序是由一个Web项目(WAR)组成的,它调用EJB项目(JAR)中的方法,所有内容都封装在一个EAR中,EAR部署在一个容器中(Jboss,不久的将来可能还有Websphere)

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

我可以轻松地将每次调用的用户id传递到EJB端,并从业务方法中执行审计,但这会使我的业务和客户机方法变得混乱

我已经研究过了,这是一个非常有趣的审计框架,但它没有对用户id进行开箱即用的审计。因此,我进一步研究并发现,这解释了如何使用RevisionListener从会话中获取用户id并将其存储在数据库中。但是,它似乎在EAR体系结构中不起作用,原因如下:此RevisionListener使用FacesContext.getCurrentInstance()从会话中获取用户id,因此这意味着RevisionListener应该位于应用程序的Web端,而不是EJB端

嗯,我希望我已经讲清楚了:)


干杯

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

您可以使用
sessionContext.getCallerPrincipal()
获取调用用户的名称

要求

  • web应用程序使用
    登录配置(在
    web.xml
    中定义)
  • JBoss web应用程序使用
    安全域
    JBoss.xml
    );其他应用服务器应该有类似的模式来实现登录/身份验证

您使用哪种类型的EJB:会话bean和/或JPA javax.persistence.Entity bean?我的EJB都是@Stateless,我的实体是javax.persistence。@EntityHm。。。我不确定我能走这条路。我的应用程序可能部署在不同的容器中,特别是Websphere,因此我不能依赖Jboss特定的配置。很抱歉,我在问题中提到了Jboss,我将删除该引用。目前我只在JSF/Servlet会话中存储记录的用户信息。安全域是Jboss特定的实现,它是登录配置的后端。具有登录配置的模式也可以在其他容器中使用。如果用户信息仅在web层中,则必须以某种方式将其传递给EJB—通过参数显式传递或使用主体隐式传递。JBoss登录模块的WebSphere对应项是自定义用户注册表-只是一个不同的名称,相同的模式。伟大的铍!我将研究这个“主要”模式。干杯