替换 Grails 插件侦听器
Replace Grails plugin listener
我需要扩展 audit-logging plugin 的侦听器 class,以便在某些情况下提供不同的功能。
为此,我创建了这个 class:
class CustomAuditLogListener extends AuditLogListener{
public CustomAuditLogListener(Datastore datastore) {
super(datastore)
}
@Override
protected void onPreUpdate(event) {
. . .
}
}
现在,为了让插件使用这个 class 而不是默认的
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())
Application listeners - PRE returns empty list
Add new Listener CustomAudtilogListener is logged
Application Listeners - POST returns empty list
我注册侦听器的方式是从插件注册侦听器的方式复制而来的,见此 class
总而言之,我需要用我自己的 CustomAuditLogListener 替换 AuditLogListener。目前上述过程不起作用。有什么建议吗?
嘿抱歉,但是 post 确实看起来有点混乱,虽然我想我明白了
I need to extend the listener class of audit-logging plugin.
Now, in order for the plugin to use this class instead of the default
AuditLogListener,
所以您正试图覆盖 auditLogListener。
您的问题可能是您没有在 conf/spring/resources.groovy.
中将其声明为覆盖
我在这里为 class 而不是听众做了类似的事情:
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')
}
我需要扩展 audit-logging plugin 的侦听器 class,以便在某些情况下提供不同的功能。
为此,我创建了这个 class:
class CustomAuditLogListener extends AuditLogListener{
public CustomAuditLogListener(Datastore datastore) {
super(datastore)
}
@Override
protected void onPreUpdate(event) {
. . .
}
}
现在,为了让插件使用这个 class 而不是默认的 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())
Application listeners - PRE returns empty list
Add new Listener CustomAudtilogListener is logged
Application Listeners - POST returns empty list
我注册侦听器的方式是从插件注册侦听器的方式复制而来的,见此 class
总而言之,我需要用我自己的 CustomAuditLogListener 替换 AuditLogListener。目前上述过程不起作用。有什么建议吗?
嘿抱歉,但是 post 确实看起来有点混乱,虽然我想我明白了
I need to extend the listener class of audit-logging plugin.
Now, in order for the plugin to use this class instead of the default AuditLogListener,
所以您正试图覆盖 auditLogListener。
您的问题可能是您没有在 conf/spring/resources.groovy.
中将其声明为覆盖我在这里为 class 而不是听众做了类似的事情:
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')
}