我需要扩展audit-logging plugin的侦听器类,以便在某些场景中提供不同的功能。
为此我创建了这个类:
class CustomAuditLogListener extends AuditLogListener{
public CustomAuditLogListener(Datastore datastore) {
super(datastore)
}
@Override
protected void onPreUpdate(event) {
. . .
}
}
现在,为了让插件使用此类而不是默认值 AuditLogListener,在Bootstrap.groovy中我尝试从应用程序侦听器中删除AuditLogListener,并添加自定义侦听器:
def applicationContext = servletContext.getAttribute(GrailsApplicationAttributes.APPLICATION_CONTEXT)
log.debug("Application listeners - PRE")
log.debug(applicationContext.getApplicationListeners())
// Remove all the listeners registered by the audit plugin.
applicationContext.getApplicationListeners.each { listener ->
if (listener.class == AuditLogListener.class) {
servletContext.getApplicationListeners.remove(listener)
log.debug("AuditLogListener removed ")
}
}
grailsApplication.mainContext.eventTriggeringInterceptor.datastores.each { key, datastore ->
// Don't register the listener if we are disabled
if (!grailsApplication.config.auditLog.disabled && !datastore.config.auditLog.disabled) {
def listener = new CustomAuditLogListener(datastore)
listener.with {
// some options
}
applicationContext.addApplicationListener(listener)
log.debug("Add new listener CustomAuditLogListener")
}
}
log.debug("Application listeners -POST")
log.debug(applicationContext.getApplicationListeners())
应用程序侦听器 - PRE返回空列表
添加新的侦听器记录了CustomAudtilogListener
应用程序监听器 - POST返回空列表
我注册监听器的方式是从插件注册监听器的方式复制的,见class
总之,我需要的是用我自己的CustomAuditLogListener替换AuditLogListener。目前上述过程无效。有什么建议吗?
答案 0 :(得分:1)
嘿抱歉,但这篇文章似乎有点令人困惑,虽然我觉得我明白了
我需要扩展audit-logging插件的监听器类。
现在,为了让插件使用此类而不是默认值 AuditLogListener,
所以你试图覆盖auditLogListener。
您的问题可能是您没有在conf / spring / resources.groovy中将其声明为覆盖。
我在这里为类而不是听众做了类似的事情:
https://github.com/vahidhedayati/testwschat/blob/master/grails-app/conf/spring/resources.groovy
和类似的东西:
grails kickstart plugin KickstartFilters how to prevent password information on logs
基本上一旦你声明了你的bean
yourAppFilters(KickstartFilters)
然后欺骗你的grails-app和任何可能引用KickstartFilters的插件,现在将你的AppFilters称为替换
尝试这样的bean:(ctrl shift o)拉入CustomAuditLogListener
AuditLogListener(CustomAuditLogListener){
grailsApplication = ref('grailsApplication')
}