2013-05-24 19 views
6

Mam aplikację Grails (2.0.4) z wtyczką Spring Security (wersja 1.2.7.3) i bezpiecznym podejściem do adnotacji (domyślnie, więcej here).Reguły statyczne sprężyn zabezpieczających Grails dla zasobu odpoczynku wydają się nie działać poprawnie

Teraz mam te linki w UrlMapping.groovy z kluczowym zasobem lub pary kontroler/akcja, podobnie jak to:

"/$controller/$action?/$id?" { 
     constraints { 
      // apply constraints here 
     } 
    } 

// other rules, all working properly 

"/api/item/$id?"(resource: 'itemRest') 
'/api/item/batch-delete'(controller: 'itemRest', action: 'batchDelete') 

relaksującego odwzorowanie doskonale współpracuje z ItemRestController: każdy sposób (show, aktualizacji, zapisz, usuń) jest poprawnie odwzorowany za pomocą właściwej metody HTTP. Dodatkowa metoda (batchDelete) również działa.

I zabezpieczone url API, w ten sposób:

grails.plugins.springsecurity.controllerAnnotations.staticRules = [ 
    // ... 
    '/something/**': ['IS_AUTHENTICATED_FULLY'] 
    '/api/**': ['IS_AUTHENTICATED_FULLY'] 
] 

Teraz przekierowany na stronę logowania, jeśli rozmowy:

http://host/context/something/bla_bla 

Ale jeśli zadzwonię (z odpowiednim ładunkiem , gdy jest to wymagane):

http://host/context/api/item/batchDelete 
http://host/context/api/item/1 
http://host/context/api/item 

Podejrzewam, że statyczne reguły nie działają poprawnie podczas mapowania pozostałych elementów sterujących er za pomocą klucza zasobów.

Należy również pamiętać, że URL "coś" nie występuje w pliku UrlMapping.groovy.

Wszelkie pomysły?

Odpowiedz

7

myślę, trzeba użyć

grails.plugins.springsecurity.controllerAnnotations.staticRules = [ 
    '/itemrest/**': ['IS_AUTHENTICATED_FULLY'], 
     //this will be redundant after the above rule I guess 
    '/api/**': ['IS_AUTHENTICATED_FULLY'] 
] 

adresów URL, które nie są odwzorowywane w urlMapping ma skierować controller bezpośrednio w przepisach. Spójrz na warning pod dokumentami w dokumencie controllerAnnotations.staticRules.

Kiedy mapowanie adresów dla kontrolerów, które są odwzorowane w UrlMappings.groovy, trzeba zabezpieczyć un adresy URL odwzorowany. Dla przykładu, jeśli masz kontroler FooBarController, który zamapujesz na akcję /foo/bar/$, musisz zarejestrować to w controllerAnnotations.staticRules jako/foobar/**. To jest inne niż odwzorowanie, którego użylibyście dla dwóch pozostałych podejść i jest konieczne, ponieważ wpisy controlAnnotations.staticRules są traktowane tak, jakby były adnotacjami na odpowiednim kontrolerze.

Powiązane problemy