Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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
Java中MongoDB的拦截器_Java_Spring_Mongodb_Hibernate_Proxyfactory - Fatal编程技术网

Java中MongoDB的拦截器

Java中MongoDB的拦截器,java,spring,mongodb,hibernate,proxyfactory,Java,Spring,Mongodb,Hibernate,Proxyfactory,我是Spring和MongoDB的新手。我正在审核MongoDB上的CRUD操作。 我已经找到了许多在MongoDB级别审计更改的插件,但我正在寻找一种类似于Java级别的拦截器或钩子(例如,hibernate的EmptyInterceptor) 我在Java上使用GMongo在MongoDB上操作。在这件事上有什么可以帮助我呢?spring data mongodb提供的AbstractMongoEventListener正是为了这些目的 请务必阅读完整的生命周期事件 您所要做的就是编写一个类

我是Spring和MongoDB的新手。我正在审核MongoDB上的CRUD操作。 我已经找到了许多在MongoDB级别审计更改的插件,但我正在寻找一种类似于Java级别的拦截器或钩子(例如,hibernate的EmptyInterceptor)


我在Java上使用GMongo在MongoDB上操作。在这件事上有什么可以帮助我呢?

spring data mongodb提供的
AbstractMongoEventListener
正是为了这些目的
请务必阅读完整的生命周期事件

您所要做的就是编写一个类(确保Spring使用
@Configuration
或componentscan对其进行扫描),该类扩展了
AbstractMongoEventListener
,并实现AbstractMongoEventListener提供的各种抽象方法,并在这些方法中编写审计逻辑

查看spring data mongodb jar中org.springframework.data.mongodb.core.mapping.event下的
LoggingEventListener

我想您可以试试。 您只需要一个实现接口的新对象并将其添加到MongoClient,然后使用MongoClient创建一个MongoClient。 就像这样:

MongoCommandListener listener = new MongoCommandListener();

MongoClientOptions options =
                        MongoClientOptions.builder().addCommandListener(listener).build();

return new MongoClient(new ServerAddress(host,port), options);

谢谢你的快速回复。问题是我不想在春天工作。相反,由于一些限制,我尝试使用纯Java。我尝试了一种解决方案:为ProxyFactory导入javassist,为DB和DBCollection创建代理类以覆盖CRUD操作。由于Groovy的自动类型转换功能而面临一些问题。所以,不要用这种方法前进。绝对。你有没有看过我编辑过的评论?你为什么要重新发明轮子。如果spring已经在这样做了,而您正在使用spring,那么为什么不使用该功能呢。如果您想使用代理和反射而不是尝试重新发明轮子,或者尝试使用它,那么它将非常混乱。我在mongodb上运行的许多服务都是作为POJO运行的,因此无法使用spring特性来审核它们。这就是问题所在。这对我帮助很大!我使用的是GMongo,它的最新版本1.5,具有版本2.13.0的mongo java驱动程序依赖性,其中MongoClientations还不支持addCommandListener。尝试过了,目前为止它工作得很好。侦听器在查询之前和查询成功时记录命令的详细信息。但是,由于我需要审计,我需要在查询前后更改文档。有没有办法在listener方法中获取文档?哦…如果你想在查询之前和之后更改文档,这种方法是行不通的。我也猜到了。。谢谢你的帮助!