6

Spring Security プラグイン (バージョン 1.2.7.3) とセキュアなアノテーション アプローチ (デフォルトのもの、詳細はこちら) を使用する Grails (2.0.4) アプリケーションがあります。

これで、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 を保護しました。

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

今、私が呼び出すと、ログインページにリダイレクトされます:

http://host/context/something/bla_bla

しかし、私が呼び出す場合はそうではありません(必要に応じて適切なペイロードを使用して):

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

残りのコントローラーをリソースキーにマッピングするときに、静的ルールが適切に機能していない可能性があります。

UrlMapping.groovy ファイルには「何か」の URL が存在しないことにも注意してください。

何か案は?

4

1 に答える 1

7

私はあなたが使用する必要があると思います

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

urlMapping でマップされていない URL はcontroller、ルールで直接参照する必要があります。ドキュメントの下にある警告を見てください。controllerAnnotations.staticRules

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

于 2013-05-24T14:59:11.020 に答える