grails - Grails过滤器 `actionExclude`是否可用于基于方法的路由?

标签 grails routing url-mapping grails-filters

我有一个基于方法的路由,例如:

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,而不是“welcome”。不知道这是否与问题有关。

我当前的解决方法(感觉很不对劲)是将以下内容添加到过滤器的正文中:
if(params.action[request.method] == 'welcome'){
    return true
}

简短的问题是:Grails是否支持基于方法的路由和基于 Action 名称的过滤的这种组合?如果是这样,怎么办?如果不是,那么有什么合理的替代方案来重构这种逻辑?

谢谢!

最佳答案

您需要使用以下过滤器:

class RequestFilters {
    def filters = {
        authorizeRequest(controller:'api', action:'*', actionExclude:'welcome'){
            before = {
                log.debug("Applying authorization filter.")
                return true
            }           
        }
    }
}

将过滤器应用于 Controller all“welcome”的but操作。 :)

如果其他 Controller 中没有其他welcome操作,则也不需要过滤器中指定的 Controller 。
authorizeRequest(action:'*', actionExclude:'welcome'){...}

关于grails - Grails过滤器 `actionExclude`是否可用于基于方法的路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18837230/

相关文章:

rest - 其余资源的 Grails spring-security 静态规则似乎无法正常工作

spring - 如何处理spring中未映射的url

grails - Grails: token 中的Oauth Twitter用户ID

grails - 使用 Spock stub Grails 域类中的 Gorm 和其他方法

Grails Spring-Security-Core 插件 - 无法验证用户

regex - 路由正则表达式要求 : exclude specific words

grails - 在同一个域类上多对多

ruby-on-rails - 路由/in Rails

css - 如何解决生产服务器上的 css 加载问题

grails - Grails URLMapping的深层路径