0

Tomcat 下的 Grails 3 战争,nginx 下运行的 Angular 2

我正在使用 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 以外的操作?

4

1 回答 1

0

我在 8889 端口上有一个用于 Angular 的 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 }

}

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

于 2016-10-18T14:58:57.313 回答