我莫名其妙地不能使它工作。我有一个运行在Tomcat 7服务器上的Java Servlet(运行在localhost:8080上),我想从另一个Web服务发出PUT-Request(运行在localhost:80上)。我已经在Servlet代码以及Tomcat配置中添加了CORS-Accept-Header,但是当我尝试进行PUT-Request时,总是会出现此错误:

[Error] Failed to load resource: Origin http://localhost is not allowed by Access-Control-Allow-Origin.


在我的Java Servlet中,我定义了以下标头:

response.addHeader("Access-Control-Allow-Origin", "*");
response.addHeader("Access-Control-Allow-Headers", "Content-Type");
response.addHeader("Access-Control-Max-Age", "86400");


在使用response.addHeader之前,我使用过response.setHeader,但这在我的情况下没有区别。
在tomcat web.xml配置文件中,我添加了以下几行:

 <filter>
    <filter-name>CorsFilter</filter-name>
    <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
    <init-param>
        <param-name>cors.allowed.methods</param-name>
        <param-value>GET,POST,HEAD,OPTIONS,PUT,DELETE</param-value>
    </init-param>
    <init-param>
        <param-name>cors.allowed.origins</param-name>
        <param-value>*</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>CorsFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>


如tomcat-7-docs中所述:https://tomcat.apache.org/tomcat-7.0-doc/config/filter.html#CORS_Filter

我真的看不到我在想什么

最佳答案

好,我知道了。这个问题很简单,但是却给我带来了很多麻烦。我正在使用eclipse进行编程,因此对该IDE还是陌生的。 Eclipse似乎在我的工作区中的二进制.metadata-folder中使用它自己的Tomcat副本。
如果还有其他人遇到此问题:更改eclipse的.metadata文件夹中的web.xml文件(在其中保存Tomcat的1:1副本),或者将eclipse设置为不使用它自己的Tomcat副本。

关于java - CORS请求错误Tomcat 7和Java Servlet,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30787704/

10-12 00:25
查看更多