替换Grails插件监听器

时间:2015-02-25 11:53:14

标签: grails grails-plugin

我需要扩展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。目前上述过程无效。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

嘿抱歉,但这篇文章似乎有点令人困惑,虽然我觉得我明白了

  

我需要扩展audit-logging插件的监听器类。

     

现在,为了让插件使用此类而不是默认值   AuditLogListener,

所以你试图覆盖auditLogListener。

您的问题可能是您没有在conf / spring / resources.groovy中将其声明为覆盖。

我在这里为类而不是听众做了类似的事情:

https://github.com/vahidhedayati/testwschat/blob/master/test/unit/anythingbut/grails/plugin/wschat/MyOverrideServiceSpec.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')
}