【问题标题】:How to exclude specific keywords from UrlMapping in Grails?如何从 Grails 中的 UrlMapping 中排除特定关键字?
【发布时间】:2013-06-09 12:21:30
【问题描述】:

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

"/$id"{
  controller = "user"
  action = "show"
}       

映射像 mydomain.com/someusername

这样的网址

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

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

【问题讨论】:

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

标签: grails grails-2.0 url-mapping


【解决方案1】:

您可以为此映射使用约束:

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

【讨论】:

    【解决方案2】:

    使用filter,并从中重定向。

    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
                    }
                }
            }
        }
    }
    

    如果您想使其特定于控制器或操作,请使用其名称而不是 '*'

    阅读更多:

    【讨论】:

      【解决方案3】:

      我已经为基于 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。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-02
        • 1970-01-01
        • 1970-01-01
        • 2013-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-15
        相关资源
        最近更新 更多