我有一个基于方法的路由,如下所示:
name base: "/" {
controller="api"
action=[GET: "welcome", POST: "post"]
}
我想应用过滤器来处理授权,例如
class RequestFilters {
def filters = {
authorizeRequest(controller: 'api', actionExclude: 'welcome') {
before = {
log.debug("Applying authorization filter.")
}
}
}
}
但是当我在实践中应用它时,过滤器会在所有请求上运行(甚至是 GET 请求,它应该使用 welcome
方法,因此不应该触发此过滤器。
当我检查在过滤器中运行 的代码时,我看到params.action
设置为路由文件中的 Map,而不是"欢迎"。 不确定这是否与问题有关。
我目前的解决方法(感觉非常错误)是将以下内容添加到我的过滤器的正文中:
if(params.action[request.method] == 'welcome'){
return true
}
简短的问题是:Grails是否支持这种基于方法的路由+基于操作名称的过滤的组合? 如果是这样,如何?如果不是,重组这种逻辑有哪些合理的选择?
谢谢!
您需要使用过滤器,如下所示:
class RequestFilters {
def filters = {
authorizeRequest(controller:'api', action:'*', actionExclude:'welcome'){
before = {
log.debug("Applying authorization filter.")
return true
}
}
}
}
将筛选器应用于控制器all
操作but
"欢迎"。 :)
如果其他控制器中没有其他welcome
操作,则也不需要在筛选器中指定的控制器。
authorizeRequest(action:'*', actionExclude:'welcome'){...}