我是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:'*')
过滤器,然后使用controllerName
和actionName
参数进行检查!但是还有更好的方法!
我的问题简而言之:正则表达式如何在过滤器中起作用?
答案 0 :(得分:1)
首先,仔细看看documentation。请注意,uri
和uriExclude
是蚂蚁路径,而不是正则表达式。如果你看看ant paths功能如何,你会发现它们不具备逻辑or
的能力,请记住这一点。
因此,考虑到所有这一点,我们将重新使用启用regex
并使用find
属性。
loggedInOnly(regex: true, find: '(.*.css|.*.js|.*image.*|\\/|\\/user\\/login)', invert: true){
before = {
...
}
}
注意我使用了反转将此过滤器应用于与find
内的任何模式都不匹配的任何内容。另外,我把它写在了我的头顶,所以你可能需要检查你的应用程序中的正则表达式(我确实使用groovy web控制台检查它,以确保我没有真正搞乱语法)。
希望这有帮助。