CORS 过滤器在我的 Java 应用程序中不起作用

Posted

技术标签:

【中文标题】CORS 过滤器在我的 Java 应用程序中不起作用【英文标题】:CORS Filter not working in my java application 【发布时间】:2018-10-06 22:31:23 【问题描述】:

我正在使用 jdk 8,并在我的 build.gradle 中添加了 tomcat-catalina,并在 web.xml 中配置了以下值,但是在访问请求 URL 时它不返回响应头。

build.gradle:

compile group: 'org.apache.tomcat', name: 'tomcat-catalina', version: '8.5.29'

web.xml

<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,HEAD,OPTIONS,PUT</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>
  <init-param>
    <param-name>cors.support.credentials</param-name>
    <param-value>true</param-value>
  </init-param>
  <init-param>
    <param-name>cors.preflight.maxage</param-name>
    <param-value>10</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>CorsFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

这对我不起作用..

共鸣:

*   Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 8080 (#0)
> GET /myApplication/test?sample=value HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.47.0
> Accept: */*
> 
< HTTP/1.1 200 
< Content-Type: application/json;charset=utf-8
< Content-Length: 78
< Date: Thu, 26 Apr 2018 08:08:31 GMT
< 

我的自定义 CorsFilter 在我的应用程序中运行良好。

我做错了什么?如何在我的应用程序中配置 apache CorsFiler 而不是自定义 CorsFiler?

请提供您的意见。

【问题讨论】:

问题解决了吗? 【参考方案1】:

我也发现了 spring 框架的类似问题。我通过在响应标头中添加 X-XSRF-TOKEN 解决了这个问题。

尝试添加。或许能解决问题。

res.addHeader("Access-Control-Allow-Headers", "x-requested-with, authorization, Content-Type, Authorization, credential, X-XSRF-TOKEN");

【讨论】:

自定义 cors 过滤器工作正常..如何在我的应用程序中启用 apache tomcat-catalina Cors 过滤器。 在这种情况下,您需要使用 Access-Control-Allow-Origin 进行限制。例如访问控制允许来源:myhost.com

以上是关于CORS 过滤器在我的 Java 应用程序中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

CORS过滤在“授权”标头中不起作用[重复]

CORS 标头在 MEAN 堆栈应用程序中不起作用

如何在 play 2.2.0 Java 中实现 CORS 过滤器?

CORS 中间件在 nodeJS 中不起作用

j_security_check 过滤器在 jboss eap 6.4 中不起作用

SearchView 在 Android 中不起作用。为啥这样?