我是grails的新手,到目前为止,我只能使用简单的过滤器。我想以有效的方式使用过滤器。
(我正在使用grails 2.4.3和jdk_1.6)
我想创建一个过滤器,以允许访问AppName/
和AppName/user/login
,但我做对了!我想使用正则表达式,但是我做错了!
我尝试了这个
loggedInOnly(uri:'/**',uriExclude :"*.css|*.js|*image*|/|/user/login"){
before = {
println "### ###### #### #"
}
}
而且我还试图逆转regex参数,但是我没有运气!我搜索了所有的google,但找不到一个线程来告诉我过滤器正则表达式的工作方式!
我知道我可以创建
xxxx(controller:'*', action:'*')
过滤器,然后使用controllerName
和actionName
参数进行检查!但是必须有更好的方法!我的问题简而言之:正则表达式如何在过滤器中工作?
最佳答案
首先,仔细看看documentation。请注意,uri
和uriExclude
是 Ant 路径,而不是正则表达式。请记住,如果您查看ant paths函数的功能,您将看到它们不具有逻辑or
的功能。
因此,考虑到所有这些,可以回到使用regex
启用,而改为使用find
属性。
loggedInOnly(regex: true, find: '(.*.css|.*.js|.*image.*|\\/|\\/user\\/login)', invert: true){
before = {
...
}
}
注意,我曾经使用invert将此过滤器应用于与
find
内部的任何模式都不匹配的任何内容。另外,我在脑海中写下了这个代码,因此您可能必须检查应用程序中的正则表达式(我确实使用groovy Web控制台对其进行了检查,以确保我没有真正弄乱语法)。希望这可以帮助。
关于regex - Grails过滤器正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26794686/