当前位置: 首页 > 知识库问答 >
问题:

如何使用envers 4 hibernate防止插入审核

景哲
2023-03-14

我使用Hibernate 4.0与envers

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

我想在插入后禁用审核。有人能告诉我如何禁用它吗。

我从4.0版本中读到了Hibernate,它会自动注册事件进行审计。

我想知道有什么方法可以禁用insert上的审核?

共有2个答案

施彬彬
2023-03-14

去除

 @Audited 

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

乌翰学
2023-03-14

冬眠恩弗斯。autoRegisterListeners-控制是否自动注册标准Envers侦听器。

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

以下是《hibernate指南》中的步骤:

  1. 通过设置注册来关闭自动Envers事件侦听器注册thehibernate.listeners.envers.auto

有关更多详细信息,请访问链接代码示例

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。冬眠积分器。spi。积分器内容示例为:

mycustom.audit.package.audit.EnverseCustomIntegrator
 类似资料:
  • 本文向大家介绍我们如何使用MySQL REPLACE语句防止插入重复数据?,包括了我们如何使用MySQL REPLACE语句防止插入重复数据?的使用技巧和注意事项,需要的朋友参考一下 我们可以在插入数据时使用REPLACE语句,以防止插入重复数据。如果我们将使用REPLACE 命令而不是INSERT命令,那么如果记录是新记录,则插入记录的方式与INSERT相同,否则,如果记录是重复记录,则新记录将

  • 我正在使用HiberNate envers进行审计,我的大多数表都很好地执行批处理插入。然而,在我的一个实体上,我有一个经过审计的集合,它似乎不想批处理。 MyEntity: (不确定这是否重要,我正在使用postgresql)。在日志中,我在一个循环中看到了1000条这样的语句 在进行一些调试时,我了解到select for update语句会导致上一次插入的刷新,而不允许它们批处理。这句话似乎

  • 注意:但凡是sql注入漏洞的程序,都是因为程序要接受来自客户端用户输入的变量或URL传递的参数,并且这个变量或参数是组成sql语句的一部分,对于用户输入的内容或传递的参数,我们应该要时刻保持警惕,这是安全领域里的【外部数据不可信任】的原则,纵观web安全领域的各种攻击方式,大多数都是因为开发者违反了这个原则而导致的,所以自然能想到,就是变量的检测、过滤、验证下手,确保变量是开发者所预想的。 1、检

  • 本文向大家介绍ThinkPHP如何防止SQL注入?相关面试题,主要包含被问及ThinkPHP如何防止SQL注入?时的应答技巧和注意事项,需要的朋友参考一下 (1)查询条件尽量使用数组方式,这是更为安全的方式; (2)如果不得已必须使用字符串查询条件,使用预处理机制; (3)使用绑定参数 (4)开启数据字段类型验证,可以对数值数据类型做强制转换;(3.1版本开始已经强制进行字段类型验证了) (5)使

  • 问题内容: 我有一个现有的代码,其中应用程序根据很多条件生成不同的sql并通过hibernate会话createSQLQuery()执行它们。在这里,这些参数与作为普通字符串替换驻留在java类中的sql字符串相连接。现在的问题是,我需要防止sql注入。因此,为此,我必须使用getNamedQuery()并绑定参数,以便hibernate将处理特殊字符。但是问题在于将字符串sql的字符串移动到xm

  • 问题内容: 在将输入数据放入MySQL数据库之前,我可以在Perl中使用该功能来清理输入吗?我不太了解正则表达式,所以在我做自己的功能之前,我想知道是否已经有一个正则表达式。 问题答案: 清理要插入数据库的数据的正确方法是对所有要插入SQL字符串的变量使用占位符。换句话说,永远不要这样做: 而是使用占位符: 然后在执行查询时传递要替换的变量: 您可以将这些操作与某些DBI便捷方法结合使用。上面也可