我在用 过滤器 处理Grails应用程序的身份验证和一些其他前置条件检查。我遇到过这样一种情况,即确保在过滤器B之前始终调用过滤器A.
根据文件“过滤器按照定义的顺序执行“但目前还不清楚该定义所指的是什么。我熟悉Java EE ServletFilters的工作方式,其中序列是通过web.xml中相应标记的顺序声明的,但是由于部署是在Grails中自动处理的,我不确定在哪里可以影响过滤器的设置顺序。
这在Grails中是否可行?如果是这样,怎么样?
更新
如果在一个类中声明了几个过滤器,很明显它们将按照声明的顺序执行。我更关心在不同类中定义的过滤器以及将考虑这些类的顺序。
Molske是正确的,它们是按照课堂上定义的顺序执行的。一个例外是返回false的第一个'before'过滤器停止处理。
还有一个新的配置选项'dependsOn',您可以使用它来订购不同的过滤器类,即MyFilters2在MyFilters1之后运行。请参阅“6.6.4过滤器依赖性” http://grails.org/doc/latest/
Molske是正确的,它们是按照课堂上定义的顺序执行的。一个例外是返回false的第一个'before'过滤器停止处理。
还有一个新的配置选项'dependsOn',您可以使用它来订购不同的过滤器类,即MyFilters2在MyFilters1之后运行。请参阅“6.6.4过滤器依赖性” http://grails.org/doc/latest/
class MyFilters{
def dependsOn=[OtherFilters]
def filters= {
doSomething(uri:"/*"){
//logic
}
}
}
在另一个过滤器中,您可以编写
class OtherFilters{
def filters={
doAnotherThing(uri:"/*"){
before={
//do other thing
}
}
}
}
class MyFilters {
def filters = {
myFilter2(controller:'*', action:'*') {}
myFilter1(controller:'*', action:'*') {}
}
}
在上面的例子中,myFilter2将首先被执行,之后,myFilter1将被执行。
过滤器在filter-class中定义的顺序,它们的执行顺序。