需要帮助在tomcat上设置CORS

时间:2014-08-05 18:59:40

标签: rest tomcat cors

我现在很困惑如何让CORS在我的Tomcat服务器上正常工作。我有一个提供REST API的应用程序。通过名为Advanced Rest Client的Chrome应用程序进行测试,此API工作正常。这是我感到困惑的地方......

  1. 我是否需要编辑整个Tomcat服务器的web.xml文件,或者只是我正在使用的特定Web应用程序中的文件?
  2. 为什么我的通话工作是通过Advanced Rest Client(浏览器中的网络应用程序)而不是通过我的网页进行的?
  3. 我可以提供您希望帮助更好地描述此问题的任何信息。这是我在这里的第一篇帖子,请原谅我们缺少任何预期的信息。如果您想看到我要拨打的电话或过滤器或我用来打电话的javascript,请直接询问。我只是不确定需要什么来帮助揭穿这样的东西。非常感谢你!

1 个答案:

答案 0 :(得分:0)

  

我是否需要编辑整个Tomcat服务器的web.xml文件,或者只是我正在使用的特定Web应用程序中的文件?

取决于你的目标。如果编辑全局web.xml,则当然可以为与筛选器定义匹配的每个URL模式启用CORS。假如您插入以下内容:


     <filter>
       <filter-name>CorsFilter</filter-name>
       <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
     </filter>
     <filter-mapping>
       <filter-name>CorsFilter</filter-name>
       <url-pattern>/*</url-pattern>
     </filter-mapping>


然后所有进入http://myhost.mydomain/myapp/ *的AJAX调用都将启用CORS。您还可以使用this filter将CORS限制为仅一个WAR文件 - 当然有优势:您不必编辑全局web.xml文件

  

为什么我的通话是通过Advanced Rest Client(浏览器中的网络应用)而不通过我的网页工作的?

不可能没有请求/响应通信的日志,但很可能这个Advanced Rest Client是可信的,因此不需要进行CORS调用(毕竟,它不是从站点A加载并尝试访问站点B通过AJAX,但由您,用户明确安装)。您可以在Chrome开发工具中找到:查看每个GET / POST请求是否有Origin: http://foo.example个标头。如果是的话,那就是CORS,如果没有则是。

Chrome extensions developer page中的这一段表示:

  

常规网页可以使用XMLHttpRequest对象从远程服务器发送和接收数据,但它们受到相同原始策略的限制。 扩展程度不是那么有限。扩展程序可以与其来源之外的远程服务器进行通信,只要它首先请求跨域权限。