如何从Grails中的UrlMapping中排除特定关键字?
我在Grails中使用以下url映射:如何从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
"/$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
}
}
}
}
}
如果要使其特定于控制器或操作,请使用其名称而不是“*”
阅读更多:
"/$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。