有条件的Envers审计 [英] Conditional Envers Auditing

查看:87
本文介绍了有条件的Envers审计的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个要求,只需在状态字段的更改上审核记录。我遵循文档章节教程15.8。有条件审计。



第1步:关闭自动Envers事件监听器注册。我有以下内容:

 < prop key =hibernate.listeners.envers.autoRegister> false< / prop> 

第二步:为适当的事件侦听器创建子类。

  public class DeleteEnversListener extends EnversPostDeleteEventListenerImpl {
private static final long serialVersionUID = 5906427978349712224L;
private static Log log = LogFactory.getLog(DeleteEnversListener.class);

public DeleteEnversListener(AuditConfiguration enversConfiguration){
super(enversConfiguration);
}

@Override
public void onPostDelete(PostDeleteEvent event){
log.info(!!! just logging entity !!+ event.getEntity( ));
super.onPostDelete(event);


$ / code>

类似地,我有




  • InsertEnversListener

  • UpdateEnversListener

  • DeleteEnversListener
  • CollectionRecreateEnversListener

  • PreCollectionRemoveEnversListener

  • PreCollectionUpdateEnversListener



  • 步骤3:创建自己的 org.hibernate.integrator.spi.Integrator

      public class CustomEnversIntegrator extends EnversIntegrator {

    private static Log log = LogFactory.getLog(CustomEnversIntegrator.class);
    $ b @Override
    public void integrate(配置配置,
    SessionFactoryImplementor sessionFactory,
    SessionFactoryServiceRegistry serviceRegistry){

    super.integrate(configuration, sessionFactory,serviceRegistry);
    final AuditConfiguration enversConfiguration = AuditConfiguration.getFor(configuration,serviceRegistry.getService(ClassLoaderService.class));
    EventListenerRegistry listenerRegistry = serviceRegistry.getService(EventListenerRegistry.class);

    System.out.println(注册事件监听器);
    if(enversConfiguration.getEntCfg()。hasAuditedEntities()){
    listenerRegistry.appendListeners(EventType.POST_INSERT,new InsertEnversListener(enversConfiguration));
    listenerRegistry.appendListeners(EventType.POST_UPDATE,new UpdateEnversListener(enversConfiguration));
    listenerRegistry.appendListeners(EventType.POST_DELETE,new DeleteEnversListener(enversConfiguration));
    listenerRegistry.appendListeners(EventType.POST_COLLECTION_RECREATE,new CollectionRecreateEnversListener(enversConfiguration));
    listenerRegistry.appendListeners(EventType.PRE_COLLECTION_REMOVE,new PreCollectionRemoveEnversListener(enversConfiguration));
    listenerRegistry.appendListeners(EventType.PRE_COLLECTION_UPDATE,new PreCollectionUpdateEnversListener(enversConfiguration));
    }

    }
    }

    步骤4 :为了在Hibernate启动时自动使用集成器,您需要添加一个 META-INF / services / org.hibernate.integrator.spi.Interator 文件。这里是 org.hibernate.integrator.spi.Integrator 文件的内容

      com.hib.sample.listener.CustomEnversIntegrator 

    我不确定,如果我缺少任何东西。我在Hibernate 4.1.8中使用JBOSS AS 7.0

    解决方案

    尝试将积分文件放入:

      sample.war\WEB-INF\classes\META-INF\services\ ... 


    I have a requirement where I want to audit records only on change of Status field. I've followed documentation chapter tutorial "15.8. Conditional auditing".

    Step 1: Turn off automatic Envers event listeners registration. I have following:

    <prop key="hibernate.listeners.envers.autoRegister">false</prop>
    

    Step 2: Create subclasses for appropriate event listeners.

    public class DeleteEnversListener extends EnversPostDeleteEventListenerImpl {   
        private static final long serialVersionUID = 5906427978349712224L;
        private static Log log = LogFactory.getLog(DeleteEnversListener.class);
    
        public DeleteEnversListener(AuditConfiguration enversConfiguration) {
            super(enversConfiguration);
        }
    
        @Override
        public void onPostDelete(PostDeleteEvent event) {
            log.info("!!! just logging entity !! "+ event.getEntity());
            super.onPostDelete(event);
        }   
    }
    

    In similar way, I have

    • InsertEnversListener
    • UpdateEnversListener
    • DeleteEnversListener
    • CollectionRecreateEnversListener
    • PreCollectionRemoveEnversListener
    • PreCollectionUpdateEnversListener

    Step 3: Create your own implementation of org.hibernate.integrator.spi.Integrator

    public class CustomEnversIntegrator extends EnversIntegrator   {
    
        private static Log log = LogFactory.getLog(CustomEnversIntegrator.class);
    
        @Override
        public void integrate(Configuration configuration,
                SessionFactoryImplementor sessionFactory,
                SessionFactoryServiceRegistry serviceRegistry) {
    
            super.integrate(configuration, sessionFactory, serviceRegistry);
            final AuditConfiguration enversConfiguration = AuditConfiguration.getFor( configuration, serviceRegistry.getService( ClassLoaderService.class ) );
            EventListenerRegistry listenerRegistry = serviceRegistry.getService( EventListenerRegistry.class );
    
            System.out.println("Registering event listeners");
            if (enversConfiguration.getEntCfg().hasAuditedEntities()) {
                listenerRegistry.appendListeners(EventType.POST_INSERT, new InsertEnversListener(enversConfiguration));
                listenerRegistry.appendListeners(EventType.POST_UPDATE, new UpdateEnversListener(enversConfiguration));
                listenerRegistry.appendListeners(EventType.POST_DELETE, new DeleteEnversListener(enversConfiguration ) );
                listenerRegistry.appendListeners(EventType.POST_COLLECTION_RECREATE, new CollectionRecreateEnversListener(enversConfiguration ) );
                listenerRegistry.appendListeners(EventType.PRE_COLLECTION_REMOVE, new PreCollectionRemoveEnversListener(enversConfiguration ) );
                listenerRegistry.appendListeners(EventType.PRE_COLLECTION_UPDATE, new PreCollectionUpdateEnversListener(enversConfiguration ) );
            }
    
        }
    }
    

    Step 4: For the integrator to be automatically used when Hibernate starts up, you will need to add a META-INF/services/org.hibernate.integrator.spi.Integrator file. Here is content of org.hibernate.integrator.spi.Integrator file

    com.hib.sample.listener.CustomEnversIntegrator
    

    I am not sure, if I am missing anything. I am using JBOSS AS 7.0 with Hibernate 4.1.8

    解决方案

    Try to place integrator file into:

    sample.war\WEB-INF\classes\META-INF\services\...
    

    这篇关于有条件的Envers审计的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆