首页 > 解决方案 > WAF 环境中的 PrimeFaces,内部和外部 URL

问题描述

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

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

PrimeFaces 扩展属性,例如

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

这会导致 CORS 问题。

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

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

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

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

更新

这个问题已经过时了,WAF 必须正确处理这个问题(旧的 SSL 环境做到了,新的 WAF 环境没有)

标签: jsfprimefacescorsliferayweb-application-firewall

解决方案


你说

门户不知道外部 URL

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

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

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

让基础设施为您处理。不要为它编写代码(或应用程序配置)。


推荐阅读