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

Posted

技术标签:

【中文标题】如何在 Grails 2 过滤器中定义多个不同的控制器?【英文标题】:How to define multiple distinct controllers in Grails 2 filter? 【发布时间】:2012-02-15 00:12:58 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

使用管道符号:

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

【讨论】:

@Burt Beckwith - 不,这很划算。把它留给伯特。顺便说一句,您的 Grails 教程已经多次提供了帮助 :) 您将如何针对不同的操作执行此操作?即,Controller1 有动作 A,Controller2 有动作 b。【参考方案2】:

如果您可以定义一个匹配 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) 

    

警告

我还没有测试过上面的任何代码,所以请谨慎购买!

【讨论】:

【参考方案3】:

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

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

【讨论】:

当然你可以做到那个,我正在寻找一种更优雅的方式。 是的,但是在像“(controller1|controller2)”这样的过滤器中处理多个控制器,意味着稍后您需要制作一个排除这些控制器的过滤器,这真的很混乱。

以上是关于如何在 Grails 2 过滤器中定义多个不同的控制器?的主要内容,如果未能解决你的问题,请参考以下文章

Grails 3.2.4:未调用自定义身份验证过滤器

如何使用域类字符串名称访问用户定义的 Grails 项目包名称

如何在 AWS Elastic Beanstalk 中为多个 grails 环境使用单个 .war?

从 Grails 中的过滤器定义控制器可访问变量

如何在Grails的多个字段中订购?

Grails 2 服务中的多个动态数据源