2013-05-24 4 views
6

Spring Securityプラグイン(バージョン1.2.7.3)とセキュリティ保護されたアノテーションアプローチ(デフォルトのものは、here)を使用するGrails(2.0.4)アプリケーションがあります。Grails spring-securityの静的なリソースの静的なルールが正常に動作していないようです

さて、私はこのように、リソースキーまたはコントローラ/アクションのペアでUrlMapping.groovyにこれらのURLを持っている:

"/$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なマッピングがItemRestControllerで完璧に動作します:すべてのメソッド(ショー、更新、保存、削除)が適切なHTTPメソッドで正しくマッピングされているかどうかを確認します。そして、余分なメソッド(batchDelete)も同様に機能します。

私はこれやって、APIのURLを確保:私は(適切なペイロードを呼び出す場合

http://host/context/something/bla_bla 

でもない:私が呼び出した場合、今

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

を、私は、ログインページにリダイレクトされます、必要に応じて):

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

私の疑いのあることは、残りのコントロールをマッピングするときに静的ルールが正しく機能していないことですリソースキーを使用してください。

「something」というURLは、UrlMapping.groovyファイルには存在しません。

アイデア?私はあなたがurlMappingにマッピングされていない

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

URLを使用する必要があると思います

答えて

7

は、ルールで直接controllerを参照することがあります。ドキュメントのcontrollerAnnotations.staticRuleswarningをご覧ください。

UrlMappings.groovyにマップされているコントローラのURLをマッピングする場合は、URLにマップされていないURLを保護する必要があります。 の場合 /foo/bar/$ actionにマップするFooBarControllerがある場合は、 controllerAnnotations.staticRules/foobar/**に登録する必要があります。コントローラは、他の2つのアプローチで使用するマッピングと異なり、controllerAnnotations.staticRulesエントリは が対応するコントローラの注釈であるかのように扱われるため、 が必要です。

関連する問題