访问控制允许来源:* 在 tomcat 中

问题描述 投票:0回答:9

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

访问控制允许来源:*

从 stackoverslow 和 google 上的各种不同链接中,大多数都指向资源This再次说明了如何做到这一点。我已经复制了相同的内容,但仍然没有显示标题。 这就是我所做的: 1)将cors.jar文件复制到tomcat的/lib文件夹中 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。请帮忙。

tomcat http-headers
9个回答
21
投票

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


16
投票

出现此问题是因为未将

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>

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>

我必须这样做才能让一切正常工作。


8
投票

试试这个。

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.添加到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>

4
投票

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


1
投票

请再次检查您的 web.xml。你可能犯了一些愚蠢的错误。由于我的应用程序使用相同的 init-param 配置运行良好...

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


1
投票

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

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


0
投票

我也有同样的问题。 我尝试按照 https://tomcat.apache.org/tomcat-10.0-doc/config/filter.html 上的 tomcat 参考进行操作,但真正有效的是使用这个:

<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,PUT,DELETE,HEAD,OPTIONS</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>
</filter>
<filter-mapping>
  <filter-name>CorsFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

0
投票

不要忘记“cors.allowed.headers”参数中还需要“Access-Control-Allow-Origin”。 如果没有它,cors 过滤器永远不会看到标头和错误,就好像它没有发送一样。 (使用Tomcat 10)

© www.soinside.com 2019 - 2024. All rights reserved.