2013-06-09 10 views
5

używam następujące odwzorowanie URL w Grails:Jak wykluczyć określone słowa kluczowe z UrlMapping w Grails?

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

zamapować adresy URL jak mydomain.com/someusername

Jak mogę dołączyć ograniczenia co do mapowania url wykluczyć słowa kluczowe, takie jak „login”, „wylogowania”, ...

Tj mydomain.com/someusername powinny trasa do mydomain.com/user/show/someusername, mydomain.com/login nie powinno drogę do mydomain.com/user/show/ Zaloguj Się.

+0

Co masz na myśli przez * użytkownika/show/login *? Czy 'login' jest akcją? – dmahapatro

+0

mydomain.com/someusername powinien prowadzić do mydomain.com/user/show/someusername, mydomain.com/login nie powinien prowadzić do mydomain.com/user/show/login. – confile

Odpowiedz

14

Można użyć contrainsts dla tego mapowania:

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

To fajne, nie wiedziałem, że możesz to zrobić! :) – elias

2

Użyj filter i przekieruj z niego.

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

Jeśli chcesz, aby to specyficzny do kontrolera lub działania, należy jej nazwę zamiast '*'.

Więcej:

1

ja zrobiłem tego typu rzeczy na odpoczynek na podstawie punktów końcowych wiele razy, a Grails jest na tyle sprytny, aby dojść do tego czego chcesz. Należy pamiętać, że porządkowanie w pliku UrlMappings może być ważne.

Na przykład, można zdefiniować następująco:

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

Następnie po trafieniu „/ login” pójdziesz w auth: metody logowania, ale po trafieniu „/ userid” użytkownik zostanie wysłany do user: view: userid zgodnie z oczekiwaniami.

Powiązane problemy