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 能够很好地使用虚拟主机名来区分不同的站点 - 如果它们完全不同,您可能已登录到其中一个,但未登录到另一个。这对权限有影响。
让基础架构为您处理。不要为其编写代码(或应用程序配置)。
假设我们有一个内部 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 能够很好地使用虚拟主机名来区分不同的站点 - 如果它们完全不同,您可能已登录到其中一个,但未登录到另一个。这对权限有影响。
让基础架构为您处理。不要为其编写代码(或应用程序配置)。