如何定义Grails过滤器的调用顺序

时间:2010-08-09 20:34:08

标签: grails filter

我正在使用filters来处理Grails应用程序的身份验证和其他一些前置条件检查。我遇到过这样一种情况,即确保在过滤器B之前始终调用过滤器A

根据文档,“过滤器按照定义的顺序执行”,但不清楚该定义所指的是什么。我熟悉Java EE ServletFilters是如何工作的,其中序列是通过web.xml中相应标签的顺序声明的,但是由于部署是在Grails中自动处理的,我不确定在哪里可以影响订单其中设置了过滤器。

这在Grails中是否可行?如果是,那该怎么办?

更新

如果在一个类中声明了几个过滤器,很明显它们将按照声明的顺序执行。我更关心在不同类中定义的过滤器以及将考虑这些类的顺序。

3 个答案:

答案 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中定义过滤器的顺序,它们的执行顺序。