Java 启用CORS Apache Tomcat 7.0.52

Java 启用CORS Apache Tomcat 7.0.52,java,apache,tomcat,cors,activation,Java,Apache,Tomcat,Cors,Activation,我一直在尝试在我的Microsoft Azure Apache Tomcat服务器上启用CORS,我尝试了很多技术,但我仍然无法启动和运行CORS。我已经将它添加到web.xml文件中,但没有幸运地启用它 <filter> <filter-name>CorsFilter</filter-name> <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>

我一直在尝试在我的Microsoft Azure Apache Tomcat服务器上启用CORS,我尝试了很多技术,但我仍然无法启动和运行CORS。我已经将它添加到web.xml文件中,但没有幸运地启用它

<filter>
  <filter-name>CorsFilter</filter-name>
  <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
  <init-param>
    <param-name>cors.allowed.origins</param-name>
    <param-value>*</param-value>
  </init-param>
  <init-param>
    <param-name>cors.allowed.methods</param-name>
    <param-value>GET,POST,HEAD,OPTIONS,PUT</param-value>
  </init-param>
  <init-param>
    <param-name>cors.allowed.headers</param-name>
    <param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers</param-value>
  </init-param>
  <init-param>
    <param-name>cors.exposed.headers</param-name>
    <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value>
  </init-param>
  <init-param>
    <param-name>cors.support.credentials</param-name>
    <param-value>true</param-value>
  </init-param>
  <init-param>
    <param-name>cors.preflight.maxage</param-name>
    <param-value>10</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>CorsFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

克斯菲尔特
org.apache.catalina.filters.CorsFilter
科尔斯
*
cors.methods
获取、发布、头部、选项、放置
cors.allowed.headers
内容类型、X-Requested-With、accept、Origin、访问控制请求方法、访问控制请求标头
cors.exposed.headers
访问控制允许来源,访问控制允许凭据
cors.support.credentials
真的
cors.preflight.maxage
10
克斯菲尔特
/*
我一直收到一个错误:

XMLHttpRequest无法加载url&output=json。不 “Access Control Allow Origin”标头出现在请求的服务器上 资源。因此,不允许访问源“”


关于如何快速实现这一目标,有什么建议吗?我一直在网上查看大量的资源,不幸的是,我无法让它正常工作。期待您的建议。

您的
web.xml
看起来还可以,所以我希望它能按要求设置响应标题(您的问题也没有说明这一点)

但是,在一些现代浏览器(Chrome、Firefox等)上,您会发现它们不允许使用通配符:

<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
<init-param>
    <param-name>cors.allowed.origins</param-name>
    <param-value>*</param-value>
</init-param>
org.apache.catalina.filters.CorsFilter
科尔斯
*
相反,您需要指定一个预期的域,以提高安全性:

<filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
<init-param>
    <param-name>cors.allowed.origins</param-name>
    <param-value>http://otherdomain.com</param-value>
</init-param>
org.apache.catalina.filters.CorsFilter
科尔斯
http://otherdomain.com
有用的是,原点列表可以用逗号分隔:

可以指定*以允许从任何来源访问资源。 否则,可以提供逗号分隔原点的白名单。如: , . 默认值:*(任何原点都是 允许访问资源)


来源:

我已经试过了,但是我没有发现这个答案有帮助,我认为尽管我做了上面提到的事情,CORS仍然没有在我的服务器上启用。还有其他步骤来验证吗?好的,米卡维利。我要试一试。我会在一分钟后回复我的发现。谢谢你的回答。我仍然在提出请求时出错,我觉得CORS尚未启用。我正在从apache-tomcat-7.0.52/conf/web.xml区域更改web.xml。我收到一个错误:{“readyState”:0,“status”:0,“statusText”:“NetworkError:未能在“XMLHttpRequest”上执行“send”:未能加载“url”。}并且我的DOM显示了我在问题中提到的错误。服务器响应头是什么样子的?您可以在浏览器开发人员透视图的网络选项卡中查看它们。服务器响应标题看起来正常,并给出正确的响应,即200<代码>内容长度:66内容类型:application/json;charset=UTF-8日期:2015年5月11日星期一15:45:43 GMT服务器:Apache Coyote/1.1查看。我在过去也遇到过类似的CORS问题,并在Tomcat上附加了一个调试器以逐步完成过滤器。如果内存可用,您可以修改logger选项以查看筛选器中的调试语句,但我无法从这里访问源代码,也无法立即记住它们。最重要的是确保您发送的所有标头都在CORS筛选器defn中。区分大小写。您可以使用像fiddler或charles这样的代理(甚至可以使用浏览器工具,具体取决于您的请求来自何处),并检查所有允许的标题是否都列在您的CORS defn中。