Grails CORS未启用,因为没有来源

时间:2016-11-01 09:39:03

标签: grails groovy cors

我有一个grails 2.2.4申请。我想启用CORS 所以我在build config中安装了以下行来安装cors插件。

plugins {
    runtime ':cors:1.1.8'
}

然后在config.groovy

cors.headers = ['Access-Control-Allow-Origin': '*']

但在此之后,当我运行应用程序时,CORS未启用。所以我调试了CORS插件。问题似乎是CorsFilter类中的以下方法

private boolean checkOrigin(HttpServletRequest req, HttpServletResponse resp) {
    String origin = req.getHeader("Origin");
    if (origin == null) {
        //no origin; per W3C spec, terminate further processing for both preflight and actual requests
        return false;
    }

上面一行中的origin参数始终为null,因为请求没有参数'Origin'。有什么我做错了吗?我不是在寻找答案,说明添加一个名为“Origin”的手动标题,因为这不是一个正确的修复

我对CORS很陌生,所以请求帮助。

2 个答案:

答案 0 :(得分:1)

除了Access-Control-Allow-Origin之外,除了根据请求设置Origin头之外,您可能还需要指定这些响应头:

  • Access-Control-Allow-Headers:accept
  • Access-Control-Allow-Headers:origin
  • Access-Control-Allow-Headers:content-type
  • Access-Control-Allow-Method:GET
  • Access-Control-Allow-Method:POST

另外,请确保使用这些标头和空白200 OK响应来响应HTTP OPTIONS请求。

答案 1 :(得分:0)

现在,让我们假设RestClient正在正确发送Origin头。它可能仍会被您的应用程序剥离。您可以使用SELECT * FROM datatables_demo where CONCAT(first_name, last_name, position, office) REGEXP 'T'; 标题来阻止此操作。

我的Web服务遇到的大多数问题都是正在发送正确的标头,但是我的网络服务器将它们从邮件中删除。所以我倾向于采用一种霰弹枪的方式来实现一切"然后一个接一个地删除我不需要的东西。我的allow-headers标头通常很长,我最终必须在我的请求最终通过之前包含Access-Control-Allow-Headers: Origin和其他垃圾之类的东西。

我还建议您使用除RestClient之外的其他内容进行测试,如果仅作为完整性检查。我使用免费的Chrome应用Postman进行所有的消息传递测试。在我看来,问题是RestClient没有发送正确的Origin头。