在Grails docs中,它会读取驻留在/conf
中的过滤器类按惯例获取。
我们希望将所有过滤器存储在插件中;有选择地配置特定的使用,但我找不到一个证明这一点的例子。
如果这是我的过滤器......
class ParameterManipulationFilters {
def filters = {
paramFilter(controller: '*', action: '*') {
before = {
if (...) {
doSomething()
return true
}
}
}
}
}
...在/conf
中一切正常,但如果过滤器位于插件中该怎么办?
过滤器上的docs对与此功能相关的spring bean有所帮助;不确定CompositeInterceptor
是否需要手动配置以实现此目的。
答案 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过滤器,如果这对您的应用更有意义。
我希望有所帮助。