1

AngularJS フロントエンドから他のサーバーの Grails 2.3.1 RESTful サービスへのクロスドメイン リクエスト [CORS] を実行しようとしています。

AngularJS は、クロスドメイン リクエストに対して最初に OPTIONS http リクエストを送信します。

これをサポートするために、RestfulController を拡張する次のメソッドを Controller に追加しました

static allowedMethods = [save: "POST", update: "PUT", delete: "DELETE", options: "OPTIONS", trace: "TRACE", head: "HEAD"]
    @Secured(value=['permitAll'], httpMethod='OPTIONS')
    def options() {
        log.debug("i am in options method")
        response.setHeader("Allow", "GET,POST,PUT,DELETE,OPTIONS,TRACE,HEAD")
        return
    }

次の cURL コマンドでは、コントローラーの options() メソッドが呼び出されません。curl は常に 301 応答を受け取ります。

curl -H "Origin: http://example.com" -X OPTIONS --verbose http://localhost:8080/Console/tenants/1/spaces.xml

これは Spring Security コア プラグインのバグですか、それとも何か不足していますか?

私の環境は、Grails 2.3.1、Spring Security Core、ACL 2.0-RC1 プラグイン、および CORS プラグイン 1.1.1 で構成されています。

4

2 に答える 2

0

これは、ブラウザがアクションの前にクロス ドメイン リクエストをチェックするためです。これは、サーブレット フィルターを使用するか、 CORS Grails プラグインを使用するだけで実行できます。

于 2013-10-21T12:31:10.083 に答える