用于CORS-GET的grails中的拦截器可以工作但不能PUT,POST,DELETE

时间:2016-10-14 07:03:53

标签: angular grails3

Grags 3在tomcat下战争,角度2在nginx下运行

我使用的是grails 3.2.0.M2。我使用了默认控制器来使用其余的配置文件,所以基本上所有的代码都在UrlMappings.groovy文件中。

这是拦截器代码

package heroes2
class HeroInterceptor {

    boolean before() {
        // header( "Access-Control-Allow-Origin", "http://localhost:8081" )
        response.setHeader("Access-Control-Allow-Origin", "*")
        // response.setHeader("Access-Control-Allow-Origin", "http://centos7-ansible")
        if (request.method == "OPTIONS") {
            response.setHeader("Access-Control-Allow-Origin", "*")
            // response.setHeader("Access-Control-Allow-Origin", "http://centos7-ansible")
            response.setHeader("Access-Control-Allow-Credentials", "true")
            response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE")
            response.setHeader("Access-Control-Max-Age", "3600")
            response.status = 200
        }

        true
    }

没有拦截器我在GET上遇到CORS错误。现在,GET现在检索代码。但POST,PUT和DELETE操作仍然在浏览器控制台中显示CORS错误。

我是否需要对插件的grails代码进行其他更改以涵盖GET以外的操作?

1 个答案:

答案 0 :(得分:0)

我在8889端口上有一个gulp服务器用于角度,下面的拦截器适用于带有GRAILS 3.1.6的ApiController。

class ApiInterceptor {

ApiInterceptor() {
  matchAll()
}

boolean before() {
  println "  Interceptor calling..."
  header( "Access-Control-Allow-Origin", "http://localhost:8889" )

  boolean options = ("OPTIONS" == request.method)
  if (options) {
    println "   OPTIONS case..."
    header( "Access-Control-Allow-Origin", "http://localhost:8889" )
    header( "Access-Control-Allow-Credentials", "true" )
    header( "Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE, PUT")
    header( "Access-Control-Max-Age", "3600" )

    response.status = 200
  }

 true 
}

boolean after() { true }

}

我建议使用不带*但带有localhost:yourport的URL开始一些测试,并在拦截器中插入一些println来检查是否正确输入了option-branch-if。