2013-05-24 21 views
6

Spring Güvenlik eklentisini (sürüm 1.2.7.3) kullanan bir Grails (2.0.4) uygulaması ve güvenli ek açıklama yaklaşımı (varsayılan bir, daha fazla here) var.Grails yay güvenliği kaynak için statik kurallar düzgün çalışmıyor

Şimdi, bu gibi kaynak anahtar veya denetleyici/eylem çifti ile UrlMapping.groovy bu URL'leri vardır:

"/$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') 

RESTful haritalama ItemRestController ile mükemmel çalışıyor: Her yöntemi (gösteri, güncelleme, kaydet, sil) uygun HTTP yöntemiyle doğru şekilde eşlenir. Ve ekstra yöntem (batchDelete) de çalışır.

bunu yaparken, API url emniyete: Artık

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

, ben ararsanız giriş sayfasına yönlendirildi:

http://host/context/something/bla_bla 

Ama düzgün yük ile (ararsanız ne zaman) gereklidir:

dinlenme controll eşlerken Benim şüpheli statik kuralları düzgün çalışmıyor olması
http://host/context/api/item/batchDelete 
http://host/context/api/item/1 
http://host/context/api/item 

Kaynak anahtar ile er.

Ayrıca, "bir şey" url dosyasının UrlMapping.groovy dosyasında bulunmadığını da unutmayın.

Herhangi bir fikrin var mı?

cevap

7

Sana urlMapping eşlenen kuralların doğrudan controller başvurmak zorunda değildir

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

Url'leri kullanmak zorunda düşünüyorum. Dokümanlarda, controllerAnnotations.staticRules'un altındaki warning'a bir göz atın. UrlMappings.groovy eşleştirileceğini denetleyicileri için URL'ler haritalama zaman

, un-url-eşlenen güvenli URL'leri gerekir. örneğinde, /foo/bar/$ eylemini eşlediğiniz bir FooBarController varsa, bunu controllerAnnotations.staticRules as/foobar/** olarak kaydetmeniz gerekir. Bu, diğer iki yaklaşım için kullanacağınız eşleştirmeden farklı şeklindedir ve denetleyiciAnnotations.staticRules girdileri, karşılık gelen denetleyicide ek açıklamaları yapılmış gibi davranılmış olduğundan gereklidir.

İlgili konular