Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript CORS angular js+;轻松上岗_Javascript_Angularjs_Resteasy - Fatal编程技术网

Javascript CORS angular js+;轻松上岗

Javascript CORS angular js+;轻松上岗,javascript,angularjs,resteasy,Javascript,Angularjs,Resteasy,我正在做一些POST请求,从我的angular js应用程序到我的RESTful API,使用RestEasy实现 情况是我需要CORS,因此我添加了一个servlet过滤器,其中包含以下代码: public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletResponse response

我正在做一些POST请求,从我的angular js应用程序到我的RESTful API,使用RestEasy实现
情况是我需要CORS,因此我添加了一个servlet过滤器,其中包含以下代码:

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
    HttpServletResponse response = (HttpServletResponse) res;
    response.addHeader("Access-Control-Allow-Origin", "*");
    response.addHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
    response.addHeader("Access-Control-Max-Age", "3600");
    response.addHeader("Access-Control-Allow-Headers", "Content-Type");
    chain.doFilter(req, res);
}
但我不明白为什么它只适用于GET请求而不适用于POST请求,chrome控制台上的错误是:

请求的服务器上不存在“Access Control Allow Origin”标头 资源

我的职位要求是:

$http({method: 'POST', 
       url: myUrl,
       data: $scope.data,
       headers: {'Content-Type': 'application/json'}
});  
这是我在邮件中收到的回复:

Allow:POST, OPTIONS
Content-Length:0
Date:Thu, 03 Apr 2014 23:27:22 GMT
Server:Apache-Coyote/1.1
有什么想法吗?谢谢
编辑:

在IE10上测试,可以工作,但在chrome和firefox上都不工作。。。有人知道为什么吗?

我终于找到了解决办法:
它与IE一起工作的原因是IE直接发送一个POST,而不是首先发送一个飞行前请求以请求许可。
但我仍然不知道为什么过滤器无法管理选项请求,并在默认情况下发送过滤器中未描述的头文件(似乎是唯一一种情况下的覆盖…可能是一件容易的事情…)

因此,我在我的rest服务中创建了一个选项路径,该路径重写响应,并使用响应头将头包含在响应中

如果有人面临这个问题,我仍然在寻找一种干净的方法 以前


通过使用以下库,我很幸运地为我的API(在Wildfly上)配置了跨源资源共享(CORS):

<dependency>
<groupId>com.thetransactioncompany</groupId>
<artifactId>cors-filter</artifactId>
<version>2.1</version>
</dependency>

交易公司
cors过滤器
2.1
安装起来很容易。只需将上述依赖项添加到pom中,然后将以下配置添加到web.xml文件的webapp部分

<filter>
    <filter-name>CORS</filter-name>
    <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>

    <init-param>
        <param-name>cors.allowGenericHttpRequests</param-name>
        <param-value>true</param-value>
    </init-param>

    <init-param>
        <param-name>cors.allowOrigin</param-name>
        <param-value>*</param-value>
    </init-param>

    <init-param>
        <param-name>cors.allowSubdomains</param-name>
        <param-value>false</param-value>
    </init-param>

    <init-param>
        <param-name>cors.supportedMethods</param-name>
        <param-value>GET, HEAD, POST, DELETE, OPTIONS</param-value>
    </init-param>

    <init-param>
        <param-name>cors.supportedHeaders</param-name>
        <param-value>*</param-value>
    </init-param>

    <init-param>
        <param-name>cors.supportsCredentials</param-name>
        <param-value>true</param-value>
    </init-param>

    <init-param>
        <param-name>cors.maxAge</param-name>
        <param-value>3600</param-value>
    </init-param>

</filter>

<filter-mapping>
    <!-- CORS Filter mapping -->
    <filter-name>CORS</filter-name>
    <url-pattern>*</url-pattern>
</filter-mapping>

科尔斯
com.thetransactioncompany.cors.CORSFilter
cors.allowgenerichtt前传
真的
金鸡儿
*
cors.allowSubdomains
假的
cors.supportedMethods
获取、标题、发布、删除、选项
cors.supportedHeaders
*
cors.supportsCredentials
真的
科斯马克萨奇酒店
3600
科尔斯
*

如果愿意,也可以使用属性文件对其进行配置。这个库工作起来很有魅力,给了你很大的配置灵活性

您如何使用GET进行请求?同样的方法,但使用“GET”而不是“POST”和另一个url,但使用相同的WSi。我认为您不需要显式地允许
内容类型
标题。尝试删除它。仍然不起作用,正如您在我的编辑中看到的,它的浏览器功能似乎。。。FF和chrome没有收到与IE上的IEworks相同的响应头,但在chrome或Firefox上没有?那是。