如何在Apache Tomcat中启用CORS

24
我正在尝试使用一些跨域的Web服务。当我禁用Chrome的Web安全时,它可以正常工作。我希望它在不禁用Web安全的情况下也能正常工作,因此我尝试添加cross-domain.xml,但仍然无法正常工作。当我继续搜索时,了解到了Tomcat中启用CORS。
来源:http://www.w3.org/wiki/CORS_Enabled

针对 Apache Apache 可以通过 mod_headers 进行配置以公开此标题。在 Apache 中默认启用此功能,但您可能希望通过运行以下命令来确保它在部署中启用:

a2enmod headers

为了暴露标题,您可以在、和

部分内添加以下行,或在.htaccess文件中添加。

<IfModule mod_headers.c>
   Header set Access-Control-Allow-Origin "*"
 </IfModule>

请问在哪些文件中添加这些配置信息,我正在使用Eclipse中的TOMCAT。请不吝赐教。
非常感谢您提供的帮助。
3个回答

19

Tomcat通过一个过滤器来提供CORS支持。您需要将这个过滤器添加到您的web.xml文件中,并对其进行配置以匹配您的要求。可以在Tomcat文档中找到有关可用配置选项的完整详细信息。


15
谢谢您的回复。但是我已经在我的Web.xml中添加了这个,甚至尝试使用一个servlet拦截器为所有响应添加头部参数,使用response.setHeader("Access-Control-Allow-Origin","*")。但是它没有起作用。 - Ravi Dasari
即使我已经更改了web.xml的配置并添加了response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); response.setHeader("Access-Control-Max-Age", "3600"); 但仍然面临相同的问题。有人能帮忙吗? - Tanvi Garg
1
这是一个旧的帖子。但如果你正在阅读这个评论,那么你很有可能已经正确配置了你的Tomcat。CORS头文件,如allowed-origin,只会暴露给设置了ORIGIN头文件的请求。 所以,如果你只是像我一样匆忙地浏览文档,你可能会检查你的浏览器开发工具,并想知道你的头文件在哪里。尝试使用以下命令进行测试: curl -I -H 'Origin: http://www.example.com' http://localhost:8080/ - hvsp
除了CORS,是否可以通用地允许某些方法? - Eli Halych

8

请查看此答案:在Tomcat中设置CORS头

请注意,您需要Tomcat 7.0.41或更高版本。

要知道当前Tomcat实例的位置,请尝试以下操作:

System.out.println(System.getProperty("catalina.base"));

您将在控制台视图中看到该路径。

然后在该文件夹中查找/conf/web.xml,打开它并添加上面链接的行。


1
这个不起作用,我已经尝试过了。 - Tanvi Garg

1

仅补充一点额外的信息,就正确解决方案而言。请注意,您需要使用org.apache.catalina.filters.CorsFilter类。因此,如果您的Tomcat版本低于7.0.41,请下载'tomcat-catalina.7.0.41.jar'或更高版本(您可以从http://mvnrepository.com/artifact/org.apache.tomcat/tomcat-catalina下载),并将其放入Tomcat安装文件夹内的“lib”文件夹中。 我实际使用的是7.0.42 希望能有所帮助!


3
建议更新Tomcat至7.0.41或更高版本,而不是在tomcat目录中混杂不同的版本。 - ankon
听起来没问题 :) - Francisco López-Sancho

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接