Grails过滤正则表达式

时间:2014-11-07 05:28:33

标签: regex grails grails-2.4 grails-filters

我是grails的新手,到目前为止我只能使用简单的过滤器。我想以有效的方式使用过滤器。

(我使用的是grails 2.4.3,jdk_1.6)

我想创建一个过滤器,以允许访问AppName/AppName/user/login,但我无法正确使用!我想使用正则表达式,但我没有把它弄好!

我试过这个

       loggedInOnly(uri:'/**',uriExclude :"*.css|*.js|*image*|/|/user/login"){
            before = {
                println "### ###### #### #"
            }
        }

我也试图反转正则表达式参数,但我没有运气!我搜索了所有的谷歌,但我找不到一个单独的线程告诉我过滤器正则表达式是如何工作的!

我知道我可以创建xxxx(controller:'*', action:'*')过滤器,然后使用controllerNameactionName参数进行检查!但是还有更好的方法!

我的问题简而言之:正则表达式如何在过滤器中起作用?

1 个答案:

答案 0 :(得分:1)

首先,仔细看看documentation。请注意,uriuriExclude是蚂蚁路径,而不是正则表达式。如果你看看ant paths功能如何,你会发现它们不具备逻辑or的能力,请记住这一点。

因此,考虑到所有这一点,我们将重新使用启用regex并使用find属性。

loggedInOnly(regex: true, find: '(.​*.css|.*.js|.*image.*|\\/|\\/user\\/login)​', invert: true){
  before = {
    ...
  }
}

注意我使用了反转将此过滤器应用于与find内的任何模式都不匹配的任何内容。另外,我把它写在了我的头顶,所以你可能需要检查你的应用程序中的正则表达式(我确实使用groovy web控制台检查它,以确保我没有真正搞乱语法)。

希望这有帮助。