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


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

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

这在Grails中是否可行?如果是这样,怎么样?

更新

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


12821
2017-08-09 20:34


起源



答案:


Molske是正确的,它们是按照课堂上定义的顺序执行的。一个例外是返回false的第一个'before'过滤器停止处理。

还有一个新的配置选项'dependsOn',您可以使用它来订购不同的过滤器类,即MyFilters2在MyFilters1之后运行。请参阅“6.6.4过滤器依赖性” http://grails.org/doc/latest/


7
2017-08-09 21:00



谢谢,这是我正在寻找的配置选项 - Christian Hang-Hicks
grails.org/doc/latest/guide/... 直接链接 - Colin Harrington
+1在{}之前返回false以停止进一步的过滤处理,正是我正在寻找的;-) - virtualeyes
如果你想掩盖一个插件的过滤器怎么办,所以你不能改变插件,但你想阻止其中一个过滤器运行?即你不想停止所有未来的过滤器,只需在插件中停止运行即可。 - billjamesdev


答案:


Molske是正确的,它们是按照课堂上定义的顺序执行的。一个例外是返回false的第一个'before'过滤器停止处理。

还有一个新的配置选项'dependsOn',您可以使用它来订购不同的过滤器类,即MyFilters2在MyFilters1之后运行。请参阅“6.6.4过滤器依赖性” http://grails.org/doc/latest/


7
2017-08-09 21:00



谢谢,这是我正在寻找的配置选项 - Christian Hang-Hicks
grails.org/doc/latest/guide/... 直接链接 - Colin Harrington
+1在{}之前返回false以停止进一步的过滤处理,正是我正在寻找的;-) - virtualeyes
如果你想掩盖一个插件的过滤器怎么办,所以你不能改变插件,但你想阻止其中一个过滤器运行?即你不想停止所有未来的过滤器,只需在插件中停止运行即可。 - billjamesdev


class MyFilters{
def dependsOn=[OtherFilters]
    def filters= {
        doSomething(uri:"/*"){
        //logic
        }
    }
}

在另一个过滤器中,您可以编写

class OtherFilters{
    def filters={
        doAnotherThing(uri:"/*"){
            before={
            //do other thing
            }
        }
    }
}

3
2018-01-17 06:15





class MyFilters {
  def filters = {
    myFilter2(controller:'*', action:'*') {}
    myFilter1(controller:'*', action:'*') {}
  }
}

在上面的例子中,myFilter2将首先被执行,之后,myFilter1将被执行。

过滤器在filter-class中定义的顺序,它们的执行顺序。


0
2017-08-09 20:47



我想我没有在我的问题中明确说明(我会解决这个问题),它是关于在不同类中定义的过滤器。当然,类中的过滤器将按照它们定义的顺序执行,这是完全合理的。 - Christian Hang-Hicks