java - Tomcat CORS 过滤器

标签 java tomcat web-applications cors

我想启用 tomcat CORS 过滤器,我在 web.xml 中添加了这个:

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

但它不起作用。 我尝试使用自定义过滤器:

<filter>
    <filter-name>SimpleCORSFilter</filter-name>
    <filter-class>com.common.SimpleCORSFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>SimpleCORSFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

有了这个类:

public class SimpleCORSFilter implements Filter {

    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) res;
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
        chain.doFilter(req, res);
    }
}

这很好用,你能告诉我为什么吗? 我不知道这是否重要,但我正在使用 Spring Framework。

最佳答案

过滤器org.apache.catalina.filters.CorsFilter首先在请求中寻找一个 header :Origin。如果此 header 不存在,则过滤器不会在响应中添加任何 header 。也许因为这个原因不起作用。

此外,在 POST 请求中,查找 header Content-Type。其他方法也会发生类似的事情。愿你看code这个过滤器的。换句话说,有一个 flowchart :

CORS Flow Chart

关于java - Tomcat CORS 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24386712/

相关文章:

java - eclipse tomcat设置页面中的Tomcat URIEncoding ="UTF-8"

Apache ProxyPass 到具有相同 URI 的 2 个不同的 tomcat 服务器

javascript - 使用 Javascript 滑动手势 : Live translate swipe position to position of element?

java - AudioSystem 可以从 Java EE Web 应用程序访问吗?

java - 如何抑制编译器警告?

java - 如何在回收站 View 的单选组中显示多个选项

Java - 对定期清除的本地值存储的多线程访问

java - fop pdf generation with font awesome 图标

java - Spring security OAuth2 中的 JSON 请求不工作 tomcat 9

php - 如何更新 Web 应用程序以更改 mysql 数据库?