WAF 环境、内部和外部 URL 中的 PrimeFaces

PrimeFaces in a WAF environent, internal and external URLs

假设我们有一个内部 URL https://my.internal.url(在我们的例子中是 Liferay Portal),并且来自 Web 应用程序防火墙的外部 URL https://my.external.url 指向这个内部URL.

互联网用户正在使用外部 URL。

PrimeFaces 扩展属性,例如

onclick="...;window.open('https://my.interal.url'..."

这会导致 CORS 问题。

HTTP header Access-Control-Allow-Origin 不是一个选项,因为内部 URL 是内部的。

我们将与 WAF 人员讨论 URL 替换,但我想知道我们是否可以告诉 PrimeFaces 使用外部 URL(或者可能是相对 URLs 万一这行得通)。

门户不知道外部 URL 但我们当然可以将其实现为配置选项。

(查看源代码,jsf/PrimeFaces portlet 之外的内部 URL 出现次数较多,所以我也添加了 liferay 标签)

更新

问题已过时,WAF 必须正确处理这个问题(旧的 SSL 环境可以,新的 WAF 环境不会)

你说

The portal doesn't know about the external URL

但是,任何正确配置的反向代理(或 WAF)都应该转发用于请求当前页面的实际主机名。

在 Apache httpd 的 mod_proxy_http 上,这是通过选项 ProxyPreserveHost On 完成的。使用AJP转发时,主机自动转发。其他 WAF/Proxy 配置 - 当然 - 不同。但是生成 URL 的正确方法是让生成服务器知道它应该生成什么 URL。

如果您需要担心正确的主机名,您需要按要求这样做:Liferay 能够很好地使用虚拟主机名来区分不同的站点 - 如果它们完全不同,您可能已登录到其中一个,但未登录到另一个。这对权限有影响。

让基础架构为您处理。不要为其编写代码(或应用程序配置)。