尝试从 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