grails中的CORS - 所有请求都失败了?

Ste*_*all 5 javascript ajax grails groovy cors

我正在尝试在grails中设置CORS支持,我正在使用以下过滤器:

class CorsFilters {
    def filters = {
        all(controller:'*', action:'*') {
            before = {
                response.setHeader("Access-Control-Allow-Origin", "*")
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

从测试开始,看起来响应头已经为所有请求设置正确,但是当我在localhost或某些服务器外部发出请求时,我收到以下错误:

XMLHttpRequest cannot load http://server:8080. Origin http://jsbin.com is not allowed by Access-Control-Allow-Origin.
Run Code Online (Sandbox Code Playgroud)

这个实例可以在我的Chrome实例中使用,所以我不知道这里会发生什么.在失败的请求中,我试图直接命中tomcat.

可能会发生什么导致失败?

Ste*_*all 2

默认情况下,Grails 过滤器看起来在过滤器链中运行得太晚而无法使用。

如果您生成 web.xml 模板并在 sitemesh 下添加过滤器,则此方法有效。

<filter>
    <filter-name>CORSFilter</filter-name>
    <filter-class>com.blah.CorsFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>CORSFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)

class CorsFilter implements Filter {
    public void init(FilterConfig fConfig) throws ServletException { }

    public void destroy() { }

    public void doFilter(
            ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {

        ((HttpServletResponse) response).addHeader(
                "Access-Control-Allow-Origin", "*"
        )
        chain.doFilter(request, response)
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 只需编辑BuildConfig.groovy:plugins {runtime“:cors:1.0.0”...} (2认同)