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 で構成されています。