如何使用envers 4 hibernate防止对插入进行审计

时间:2017-04-17 17:37:05

标签: hibernate hibernate-envers

我正在使用带有envers的Hibernate 4.0

当我进行更新或插入时,数据将被保存到审核表中,模式为0和1

我想在插入后禁用审核。有人可以请,让我知道如何禁用它。

我已经从版本4.0中读到了hibernate,它会自动注册事件以供审核。

我有办法在插入时禁用审核吗?

2 个答案:

答案 0 :(得分:0)

删除

 @Audited 

实体上的注释,如果它们存在于实体类/字段名称上。如果您有自定义表来存储审核日志,请删除这些实体

答案 1 :(得分:0)

  

hibernate.envers.autoRegisterListeners - 控制标准Envers侦听器是否自动注册。

您可以注册自定义侦听器以允许或阻止自定义事件发挥作用。

以下是来自hibernate指南的步骤:

  
      
  1. 通过将thehibernate.listeners.envers.autoRegister Hibernate属性设置为false来关闭自动Envers事件侦听器注册。
  2.   
  3. 为适当的事件侦听器创建子类。例如,如果要有条件地审核实体插入,请扩展org.hibernate.envers.eventEnversPostInsertEventListenerImpl类。将条件审计逻辑放在子类中,如果应该执行审计,则调用super方法。
  4.   
  5. 创建自己的org.hibernate.integrator.spi.Integrator实现,类似于org.hibernate.envers.event.EnversIntegrator。使用事件监听器类而不是默认类。
  6.   
  7. 要在Hibernate启动时自动使用集成器,您需要将aMETA-INF / services / org.hibernate.integrator.spi.Integrator文件添加到jar中。该文件应包含实现该接口的类的完全限定名称。
  8.   

for more detail go to link 代码示例

import org.hibernate.envers.configuration.spi.AuditConfiguration;
import org.hibernate.envers.event.spi.EnversPostInsertEventListenerImpl;
import org.hibernate.event.spi.PostInsertEvent;

public class SprEnversPostInsertEventListenerImpl extends EnversPostInsertEventListenerImpl {

    private static final long serialVersionUID = 1L;

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

    @Override
    public void onPostInsert(PostInsertEvent event) {
        super.onPostInsert(event);
    }

}

自定义集成商的代码示例

    public class EnverseCustomIntegrator extends EnversIntegrator {

    public static final String  AUTO_REGISTER   = "hibernate.listeners.envers.autoRegister";
    private AuditConfiguration  enversConfiguration;

    @Override
    public void integrate(org.hibernate.cfg.Configuration configuration, SessionFactoryImplementor sessionFactory, SessionFactoryServiceRegistry serviceRegistry) {



        final EventListenerRegistry listenerRegistry = serviceRegistry.getService(EventListenerRegistry.class);
        listenerRegistry.addDuplicationStrategy(EnversListenerDuplicationStrategy.INSTANCE);

        enversConfiguration = AuditConfiguration.getFor(configuration, serviceRegistry.getService(ClassLoaderService.class));

        if (enversConfiguration.getEntCfg().hasAuditedEntities()) {
            listenerRegistry.appendListeners(EventType.POST_DELETE, new SprEnversPostDeleteEventListenerImpl(enversConfiguration));
            listenerRegistry.appendListeners(EventType.POST_INSERT, new SprEnversPostInsertEventListenerImpl(enversConfiguration));
            listenerRegistry.appendListeners(EventType.POST_UPDATE, new SprEnversPostUpdateEventListenerImpl(enversConfiguration));
            listenerRegistry.appendListeners(EventType.POST_COLLECTION_RECREATE, new SprEnversPostCollectionRecreateEventListenerImpl(enversConfiguration));
            listenerRegistry.appendListeners(EventType.PRE_COLLECTION_REMOVE, new SprEnversPreCollectionRemoveEventListenerImpl(enversConfiguration));
            listenerRegistry.appendListeners(EventType.PRE_COLLECTION_UPDATE, new SprEnversPreCollectionUpdateEventListenerImpl(enversConfiguration));
        }

    }
}

持久性上下文配置

            <property name="hibernate.integration.envers.enabled" value="true"/>
        <property name="hibernate.envers.autoRegisterListeners" value="true"/>

src / main / resources / META-INF / services / org.hibernate.integrator.spi.Integrator内容示例是:

mycustom.audit.package.audit.EnverseCustomIntegrator
相关问题