如何在Grails 2过滤器中定义多个不同的控制器?

时间:2012-01-20 12:10:12

标签: grails grails-filters

是否可以在Grails 2 Web应用程序过滤器中定义多个不同的控制器?例如,像:

def filters = {
    someFilterMethod(controller: 'controller1 controller2 ...', action: '*') {
        ...
    }
}

否则,有没有办法指定不在过滤器中包含主index.gsp?

3 个答案:

答案 0 :(得分:25)

使用管道符号:

def filters = {
   someFilterMethod(controller: 'controller1|controller2|...', action: '*') {
      ...
   }
}

答案 1 :(得分:4)

如果您可以定义与index.gsp匹配的规则,则可以通过添加invert: true来定义与index.gsp匹配的所有规则。我想这样的事情应该这样做:

def filters = {
    someFilterMethod(uri: '/', invert: 'true') {

    }
}

以下似乎也应该有效:

def filters = {
    someFilterMethod(uriExclude: '/') {

    }
}

您可以提供正则表达式而不是文字路径,因此如果您还需要排除'/ index',那么您只需要将'/'替换为匹配'/'和'/ index'的正则表达式。我的正则表达式技巧很生疏,但是这样的事情应该这样做:

def filters = {
    someFilterMethod(uriExclude: '/(index)?', regex: true) {

    }
}

警告

我没有测试过上面的任何代码,所以请注意这个问题!

答案 2 :(得分:1)

您可以在过滤器中包含逻辑,如

if (controllerName == "controller1" || controllerName == "controller2") {
 ...
}