问题描述
假设我们有一个内部URL https://my.internal.url
(在我们的示例中为Liferay Portal),而从Web应用程序防火墙中有一个指向该内部URL的外部URL https://my.external.url
。
互联网用户正在使用外部URL。
PrimeFaces扩展了属性,例如
onclick="...;window.open('https://my.interal.url'..."
这会导致CORS问题。
由于内部URL是内部的,因此HTTP标头Access-Control-Allow-Origin
不可选项。
我们将与WAF人员讨论URL替换,但是我想知道是否可以告诉PrimeFaces使用外部URL(或者在可能的情况下使用相对URL)。
门户网站不知道外部URL,但是我们当然可以将其实现为配置选项。
(观看源代码,在jsf / PrimeFaces portlet之外还会出现内部URL,因此我也添加了liferay标记)
更新
问题已经过时,WAF必须正确处理此问题(旧的SSL环境可以做到,新的WAF环境不能解决)
解决方法
你说
门户网站不知道外部URL
但是,任何配置正确的反向代理(或WAF)都应转发用于请求当前页面的实际主机名。
在Apache httpd的mod_proxy_http上,这是通过选项ProxyPreserveHost On
完成的。使用AJP转发时,将自动转发主机。其他WAF /代理配置-当然-有所不同。但是,生成URL的正确方法是让生成服务器知道应生成的URL。
如果您需要担心正确的主机名,则需要通过请求来解决:Liferay能够很好地使用虚拟主机名来区分不同的站点-如果它们完全不同,则可能是登录其中一个,但不登录另一个。这对权限产生了影响。
让基础架构为您处理它。不要为此编写代码(或应用程序配置)。