Access-Control-Allow-Origin:*在tomcat中

时间:2012-09-12 07:25:15

标签: tomcat http-headers

我想在我的tomcat容器中设置默认的http标头 -

  

Access-Control-Allow-Origin:*

来自stackoverslow和谷歌的各种不同链接,大多数指向resourceThis再次说明如何做到这一点。我已经复制了相同的,但仍然没有显示标题。 这就是我所做的: 1)在tomcat的/ lib文件夹中复制cors.jar文件 2)在web.xml中插入此文本

<filter>
    <filter-name>CORS</filter-name>
    <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
    <init-param>
     <param-name>cors.allowOrigin</param-name>
        <param-value>*</param-value>
    </init-param>
    <init-param>
     <param-name>cors.supportedMethods</param-name>
        <param-value>GET, POST, HEAD, PUT, DELETE</param-value>
    </init-param>
    <init-param>
     <param-name>cors.supportedHeaders</param-name>
        <param-value>Content-Type, Last-Modified</param-value>
    </init-param>
    <init-param>
        <param-name>cors.exposedHeaders</param-name>
        <param-value>Set-Cookie</param-value>
    </init-param>
    <init-param>
        <param-name>cors.supportsCredentials</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>CORS</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

它不起作用,我很无奈。我的tomcat版本是-6.0.6。请帮忙。

7 个答案:

答案 0 :(得分:15)

在撰写本文时,当前版本的Tomcat 7(7.0.41)具有内置的CORS过滤器http://tomcat.apache.org/tomcat-7.0-doc/config/filter.html#CORS_Filter

答案 1 :(得分:12)

问题出现是因为不包括jar文件作为项目的一部分。我只是把它包含在tomcat lib中。使用web.xml中的以下内容现在可以使用:

<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>
        org.springframework.web.filter.DelegatingFilterProxy
    </filter-class>
</filter>

 <filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<filter>
    <filter-name>CORS</filter-name>
    <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>

    <init-param>
        <param-name>cors.allowOrigin</param-name>
        <param-value>*</param-value>
    </init-param>
    <init-param>
        <param-name>cors.supportsCredentials</param-name>
        <param-value>false</param-value>
    </init-param>
    <init-param>
        <param-name>cors.supportedHeaders</param-name>
        <param-value>accept, authorization, origin</param-value>
    </init-param>
    <init-param>
        <param-name>cors.supportedMethods</param-name>
        <param-value>GET, POST, HEAD, OPTIONS</param-value>
    </init-param>
</filter>


<filter-mapping>
    <filter-name>CORS</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

以下项目依赖项:

<dependency>
    <groupId>com.thetransactioncompany</groupId>
    <artifactId>cors-filter</artifactId>
    <version>1.3.2</version>
</dependency>

答案 2 :(得分:10)

改变这个:

<init-param>
    <param-name>cors.supportedHeaders</param-name>
    <param-value>Content-Type, Last-Modified</param-value>
</init-param>

到此

<init-param>
    <param-name>cors.supportedHeaders</param-name>
    <param-value>Accept, Origin, X-Requested-With, Content-Type, Last-Modified</param-value>
</init-param>

我必须这样才能让任何事情发挥作用。

答案 3 :(得分:2)

请再次检查您的web.xml。你可能会犯一些愚蠢的错误。由于我的应用程序使用相同的init-param配置正常工作...

如果问题仍然存在,请复制粘贴web.xml。

答案 4 :(得分:2)

试试这个。

1.编写自定义过滤器

    package com.dtd.util;

    import javax.servlet.*;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;

    public class CORSFilter implements Filter {

        @Override
        public void init(FilterConfig filterConfig) throws ServletException {

        }

        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;
            httpResponse.addHeader("Access-Control-Allow-Origin", "*");
            filterChain.doFilter(servletRequest, servletResponse);
        }

        @Override
        public void destroy() {

        }
    }

2.add to web.xml

<filter>
    <filter-name>CorsFilter</filter-name>
    <filter-class>com.dtd.util.CORSFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>CorsFilter</filter-name>
    <url-pattern>/*</url-pattern>
 </filter-mapping>

答案 5 :(得分:1)

我必须在更改ip地址(笔记本电脑无线DHCP)后重新启动浏览器,这是我在我的网络应用程序中提到的“跨主机”,这解决了这个问题。

还要确保您的浏览器/主机添加的所有cors标头都被接受/允许,然后包含在cors.allowed.headers中

答案 6 :(得分:1)

我将 cors.support.credentials 设置为 true 以及将 cors.allowed.origins 设置为 *,这不起作用.

当 cors.allowed.origins 为 * 时,cors.support.credentials 应为 false(默认值或不应显式设置)。

https://tomcat.apache.org/tomcat-7.0-doc/config/filter.html