1

尝试从 AngularJS 前端向其他服务器上的 Grails 2.3.1 RESTful 服务执行跨域请求 [CORS]。

对于任何跨域请求,AngularJS 首先发送 OPTIONS http 请求。

为了支持这一点,我在我的控制器中添加了以下方法来扩展 RestfulController

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

这是因为浏览器会在您执行操作之前检查跨域请求。您可以使用 servlet 过滤器来做到这一点,或者只使用CORS Grails 插件

于 2013-10-21T12:31:10.083 回答
0

使用最新的 CORS Grails 插件解决了这个问题。它包括一个拦截 OPTIONS 请求并提供响应的过滤器。

于 2014-01-20T19:41:42.613 回答