【问题标题】:New CORS policy and AJP Connector issues after upgrading Apache/Tomcat to latest versions将 Apache/Tomcat 升级到最新版本后的新 CORS 策略和 AJP 连接器问题
【发布时间】:2021-06-14 05:05:00
【问题描述】:

这是我们正在运行的:

  • Windows Server 2016 64 位
  • Apache:2.4.46(从 2.4.43 升级)-->“前端”
  • Tomcat:9.0.44(从 9.0.8 升级)-->“后端”
  • Java:12.0.2

我们让 Apache 和 Tomcat 都在同一个 Windows 服务器上运行。这是前端和后端。为了安全起见,我正在尝试将我们所有的东西都升级到最新版本。当然,我已经破坏了一切。

查看 Tomcat/Java 日志后,我发现我们的两个 AJP 连接器无法启动。我被要求为这些连接器添加以下属性以使其启动:

    <Connector
          ...
          ...
          address="0.0.0.0"
          secretRequired="false"
        />

这似乎解决了我们的大部分问题;但是,现在我的一个 Web 应用程序遇到了 CORS 问题。我们的其他开发人员没有报告任何问题。

Access to XMLHttpRequest at 'https://SERVER/endpoint' from origin 'https://SERVER.DOMAIN.LOCAL' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

现在我正在输入这个,我注意到第一个指示符只是服务器的名称,第二个指示符是服务器的 FQDN。不知道是不是这个问题?

为什么我在升级 Tomcat/Apache 后会遇到所有这些问题?

如果我的 AJP 连接器和工作器都在同一个盒子上,我需要设置一个秘密吗?

为什么我现在遇到了 CORS 问题,而我以前没有?如何设置 CORS 过滤器,以便它知道 Apache Tomcat(从该服务器到该服务器)之间的通信是安全的!?!?

以下设置是否安全?在升级之前,我们从未启用此设置。

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

【问题讨论】:

  • 我相信我有一些答案,如果我成功了,我明天会发布这个问题的答案。
  • 升级后为什么要在配置中添加CorsFilter?您在浏览器中打开https://SERVER.DOMAIN.LOCAL,但该页面上的脚本向https://SERVER/endpoint 发送请求。您应该更改脚本,以便它们使用来自window.location 的地址,或者将cors.allowed.origins 参数添加到过滤器。
  • 我直到后来才发现我的错误,感谢您引用window.location 的提示。这很有帮助。

标签: java apache tomcat cors


【解决方案1】:

现在我正在输入这个,我注意到第一个指标只是 服务器的名称,第二个指标是服务器的 FQDN。我怀疑是否 这就是问题所在?

的问题。该页面位于http://server.domain.local,但我的应用程序正在向http://server 进行AJAX 调用。两者应该相同,即:两者都作为 FQDN server.domain.local,或两者都作为主机名 server。 Tomcat 升级完全没有问题,我不需要创建 CORS 过滤器。

为什么我在升级 Tomcat/Apache 后会遇到所有这些问题?

上周,我尝试将9.0.8 升级到9.0.4410.0.4 版本。在每一次尝试中,我都发现了一个“重大变化”。我越来越累了。

据我所知,requiredSecret 是从 9.0.31 版本开始的:

第二个“重大变化”与从 9.0.x 迁移到 10.0.x 有关。 Tomcat 是这样说的:

  • Tomcat 9.0.x 和 Tomcat 10.0.x 之间存在重大的重大变化。规范 API 使用的 Java 包已从 javax... 更改为 jakarta.... 有必要针对新的 API 重新编译 Web 应用程序。或者,用户可以使用 Jakarta EE 的 Apache Tomcat 迁移工具将现有的 WAR 文件从 Java EE 8 转换为 Jakarta EE 9。
  • http://tomcat.apache.org/migration-10.html

如果我的 AJP 连接器和工作器都在同一个盒子上,我是否需要 设置秘密?

我的老板让我设置它,所以我做了。我使用了以下一组说明,这太棒了: https://community.microstrategy.com/s/article/Setting-up-the-AJP-port-on-Tomcat-and-Apache-Servers?language=en_US

为什么我现在遇到了 CORS 问题,而我以前没有?我如何能 设置 CORS 过滤器,以便它知道之间的通信 Apache Tomcat(从这个服务器到这个服务器)是安全的!?!?

以下设置是否安全?在升级之前,我们从未启用此设置。

最终没有必要使用 CORS 过滤器;但是,如果您要实现一个,本文将介绍如何创建更安全的 CORS 过滤器:

https://newsroom.bedefended.com/implement-secure-cors-tomcat

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-09
    • 2022-10-08
    • 1970-01-01
    • 2022-10-13
    • 2022-08-05
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    相关资源
    最近更新 更多