【问题标题】:Unable to handle CORS requests in apache tomcat无法在 apache tomcat 中处理 CORS 请求
【发布时间】:2015-03-15 09:02:14
【问题描述】:

我正在使用 apache tomcat V7.0。从客户端,我正在进行 ajax 调用以访问托管在 apache tomcat 服务器中并使用 JAX-RS 构建的 REST 服务。我只有一种休息 GET 方法。客户端与服务器不在同一个域中。假设我已经将 html 保存在我的桌面上,然后我正在运行 html 文件。这意味着我在没有域中拥有这个 html 文件。我得到的来自服务器的响应是:[HTTP/1.1 403 Forbidden 16ms]。这是一个 CORS 错误。为了摆脱这个错误,我做了以下事情: 客户端代码:

   xmlhttp = new XMLHttpRequest();
   xmlhttp.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
   xmlhttp.setRequestHeader("Access-Control-Allow-Origin", "*");
   xmlhttp.setRequestHeader("Access-Control-Allow-Methods","GET, POST");
   //Normal ajax calls of setting url and opening requests follows

服务器端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>

即使添加了所有的 cors 处理,在服务器端和客户端我都会收到 cors 错误。 我猜这个请求甚至没有到达过滤器并且被拒绝了。服务器中是否需要一些配置才能允许请求通过。在apache中,我在网上搜索,发现我们可以在.htaccess文件中这样做,但是在apache tomcat的情况下应该怎么做?

【问题讨论】:

  • 403 并不是专门的 cors 错误。请将堆栈跟踪添加到您的问题以获得更好的答案。
  • 我在 mozilla 中得到的确切错误是:Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at localhost:8080/restMailer/rest/mailService?query={%22subject%22:%22Test%201%22, %22vendorCode%22:%22V00002%22,%22name%22:%22Test%202%22,%22enquiry%22:%22Test%203%22,%22contactNumber%22:%22Test%204%22,%22email%22 :%22Test%205%22,%22icode%22:%22as723asd343ascfgru323sA!%22}。这可以通过将资源移动到同一域或启用 CORS 来解决。
  • 看起来这个问题没有解决办法。我只是想在请求到达 tomcat 的 8080 端口时更改标头属性。
  • 如果有人遇到此类问题并找到任何解决方案,请在此线程上发帖。对于解决方法,我改用 JSONP,并且在某种程度上浏览器允许 CORS。

标签: ajax tomcat7 jax-rs cors


【解决方案1】:

您是否尝试使用您的客户信息设置 cors.allowed.origins?像这样:

  <init-param>
    <param-name>cors.allowed.origins</param-name>
    <param-value>http://10.3.50.139:8481</param-value>
  </init-param>

【讨论】:

  • 不,我没试过。应该为哪个 servlet 指定这些初始化参数?
猜你喜欢
  • 2014-10-31
  • 2023-03-31
  • 1970-01-01
  • 2017-11-01
  • 2016-11-06
  • 2020-02-01
  • 2020-06-30
  • 2018-07-24
  • 1970-01-01
相关资源
最近更新 更多