如何在Grails中重用过滤器

时间:2014-07-26 20:40:43

标签: spring grails groovy grails-2.0

在Grails docs中,它会读取驻留在/conf中的过滤器类按惯例获取。

我们希望将所有过滤器存储在插件中;有选择地配置特定的使用,但我找不到一个证明这一点的例子。

如果这是我的过滤器......

class ParameterManipulationFilters {
    def filters = {
        paramFilter(controller: '*', action: '*') {
            before = {
                if (...) {
                    doSomething()
                    return true
                }
            }
        }
    }
}

...在/conf中一切正常,但如果过滤器位于插件中该怎么办?

过滤器上的docs对与此功能相关的spring bean有所帮助;不确定CompositeInterceptor是否需要手动配置以实现此目的。

1 个答案:

答案 0 :(得分:2)

插件可以在grails-app/conf/下以与应用程序相同的方式定义过滤器。如果应用程序使用该插件,则默认情况下该过滤器将在应用程序中播放。你没有必要做任何特别的事情来实现这一目标。

您无需对CompositeInterceptor执行任何操作。

就有选择地配置使用哪些选项而言,您有许多选择。一种方法是允许应用程序在Config.groovy中启用或禁用过滤器。

考虑一个名为alpha的插件。在该插件中,您可以定义类似的内容......

// grails-app/conf/alpha/JeffFilters.groovy
package alpha

class JeffFilters {

    def isEnabled = true

    def filters = {
        // only configure the filter is if is enabled...
        if(isEnabled) {
            all(controller:'*', action:'*') {
                before = {
                    println 'JeffFilters.before is running...'
                }
            }
        }
    }
}

插件可以执行以下操作来启用/禁用它提供的过滤器...

// AlphaGrailsPlugin.groovy
class AlphaGrailsPlugin {

    // ...

    def doWithApplicationContext = { ctx ->
        if(application.config.grails.myfilterconfig?.disableJeffFilter) {
            ctx.getBean('alpha.JeffFilters')?.isEnabled = false
        }
    }

    // ...

}

默认情况下,将启用alpha.JeffFilters。应用程序(不是插件)可以使用类似的东西禁用该特定过滤器...

// grails-app/conf/Config.groovy

// ...
grails.myfilterconfig.disableJeffFilter=true

当然,您可以反过来协调它,因此默认情况下禁用at过滤器,如果这对您的应用更有意义。

我希望有所帮助。