如何从Grails中的UrlMapping中排除特定关键字?

如何从Grails中的UrlMapping中排除特定关键字?,grails,grails-2.0,url-mapping,Grails,Grails 2.0,Url Mapping,我在Grails中使用以下url映射: "/$id"{ controller = "user" action = "show" } 要映射像mydomain.com/someusername这样的URL 如何将约束附加到url映射以排除“登录”、“注销”等关键字 即。, mydomain.com/someusername应该路由到mydomain.com/user/show/someusername, mydomain.com/login不应路由到mydomain.com

我在Grails中使用以下url映射:

"/$id"{
  controller = "user"
  action = "show"
}       
要映射像mydomain.com/someusername这样的URL

如何将约束附加到url映射以排除“登录”、“注销”等关键字

即。,
mydomain.com/someusername应该路由到mydomain.com/user/show/someusername, mydomain.com/login不应路由到mydomain.com/user/show/login。

使用,并从中重定向

class UrlMappingFilters {
    def filters = {
        filterUrlKeywords(controller: '*', action: '*') {
            def keywords = ['login', 'logout']
            before = {
                if (params.id in keywords) {
                    // redirect to start, or render error...
                    redirect(uri: '/')
                    return false
                }
            }
        }
    }
}
如果要使其特定于控制器或操作,请使用其名称而不是
“*”

阅读更多:


您可以在此映射中使用CONTAINST:

"/$id"{
  controller = "user"
  action = "show"
  constraints {
    //add a validator for $id from url mapping
    id(validator: {
        return !(it in ['login', 'logout'])
    })
  }
}    

我已经多次为基于REST的端点做过这种类型的事情,Grails足够聪明,可以弄清楚您想要什么请注意,UrlMappings文件中的排序可能很重要

例如,您可以定义以下内容:

class UrlMappings {
    static mappings = {
        "/login" { controller: 'auth', action: 'login' }
        "/logout" { controller: 'auth', action: 'logout' }
        "/$id" { controller: 'user', action: 'view' }
    }
}

然后,当您点击“/login”时,您将进入auth:login方法,但当您点击“/userid”时,您将按预期发送到user:view:userid。

您所说的user/show/login是什么意思?
login
是一个操作吗?mydomain.com/someusername应该路由到mydomain.com/user/show/someusername,mydomain.com/login不应该路由到mydomain.com/user/show/login。