2013-06-09 3 views
5

Я использую следующее отображение URL-адреса в Grails:Как исключить определенные ключевые слова из UrlMapping в Grails?

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

к карте URLs как mydomain.com/someusername

Как я придаю Препятствие для отображения URL-адреса, чтобы исключить ключевые слова, как «логин», «Выход», ...

Т.е., mydomain.com/someusername должен маршрут mydomain.com/user/show/someusername, mydomain.com/login не должны маршрут к mydomain.com/user/show/ авторизоваться.

+0

Что вы подразумевали под * user/show/login *? Является ли 'login' действием? – dmahapatro

+0

mydomain.com/someusername следует перенаправлять на mydomain.com/user/show/someusername, mydomain.com/login не следует переходить на mydomain.com/user/show/login. – confile

ответ

14

Вы можете использовать contrainsts для этого отображения:

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

это круто, не знаю, что вы могли бы это сделать! :) – elias

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

Если вы хотите, чтобы сделать его специфичным для контроллера или действия, использовать его имя вместо '*'.

Подробнее:

1

Я сделал этот тип вещи для REST на основе конечных точек много раз, и Grails достаточно умен, чтобы понять что ты хочешь. Обратите внимание, что порядок в файле UrlMappings может быть важен.

Например, вы можете определить это:

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

Затем, когда вы нажмете «/ логин» вы отправитесь в аутентификации: метод входа в систему, но, когда вы нажмете «/ идентификатор» вы будете отправлены user: view: userid, как ожидалось.

 Смежные вопросы

  • Нет связанных вопросов^_^