首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止使用envers 4 hibernate对插入进行审计

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

Stack Overflow用户
提问于 2017-04-18 01:37:05
回答 2查看 2.2K关注 0票数 0

我正在使用带有envers的Hibernate 4.0

当我执行update或insert操作时,数据将以模式a 0和1保存到审计表中

我想在插入后禁用审计。有没有人能告诉我怎么禁用它。

我读到hibernate从4.0版本开始,它会自动注册事件以进行审计。

有没有办法在插入时禁用审计?

EN

回答 2

Stack Overflow用户

发布于 2017-09-21 16:44:38

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

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

下面是hibernate指南中的步骤:

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

for more detail go to link代码示例

代码语言:javascript
复制
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);
    }

}

自定义集成器的代码示例

代码语言:javascript
复制
    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));
        }

    }
}

持久化上下文配置

代码语言:javascript
复制
            <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内容示例为:

代码语言:javascript
复制
mycustom.audit.package.audit.EnverseCustomIntegrator
票数 2
EN

Stack Overflow用户

发布于 2017-04-18 12:58:52

删除

代码语言:javascript
复制
 @Audited 

实体上的注解,如果它们出现在实体类/字段names.If上,您有自定义的表来存储审核日志,请删除这些实体

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43456454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档