如何告诉tomcat支持CORS静态内容?

时间:2012-08-21 04:12:18

标签: tomcat static cors

这个问题:Servers that supports CORS?是关于常规servlet的;我知道如何设置标题来控制CORS。

我的问题是如何配置Tomcat以在CORS限制下提供静态内容。

3 个答案:

答案 0 :(得分:15)

从Tomcat 7.0.41开始,您可以通过built-in filter控制CORS行为。

您唯一需要做的就是编辑CATALINA_HOME / conf中的全局web.xml并添加过滤器定义:

     <!-- ================== Built In Filter Definitions ===================== -->

      ...

     <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>

    <!-- ==================== Built In Filter Mappings ====================== -->

答案 1 :(得分:1)

以下是用于添加CORS支持的Tomcat过滤器:https://bitbucket.org/jsumners/corsfilter

答案 2 :(得分:1)

嗨弗拉德!这是一个非常晚的回应,到现在为止你必须全力以赴。如果其他人遇到同样的问题,这就是答案。

显然,您了解CORS过滤器以及Tomcat过滤器仅适用于servlet。

要使所有静态内容通过某些 servlet,Tomcat有一个特殊的 DefaultServet - 这就是你要找的。

基本上,我们只需要在部署描述符文件(例如WEB-INF / web.xml)中启用它,例如:

<servlet-mapping>
  <servlet-name>default</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>


<servlet>
  <servlet-name>default</servlet-name>
  <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>

这种方式使用Tomcat过滤器,在我们的例子中,CORS过滤器将启用静态内容。

要测试,要使CORS过滤器实际设置标头,例如 Access-Control-Allow-Origin ,我们需要添加一些其他标头,例如 Origin 请求。 例如:

curl -H 'Origin: http://localhost/test' -i http://myserver/crossOrigin.resource

这样你会看到类似的东西:

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Access-Control-Allow-Origin: http://localhost/test
Access-Control-Allow-Credentials: true
Accept-Ranges: bytes
...