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