jsf - 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 环境没有)
解决方案
你说
门户不知道外部 URL
但是,任何正确配置的反向代理(或 WAF)都应该转发用于请求当前页面的实际主机名。
在 Apache httpd 的 mod_proxy_http 上,这是通过选项ProxyPreserveHost On
. 使用 AJP 转发时,主机会自动转发。其他 WAF/代理配置 - 当然 - 不同。但是生成 URL 的正确方法是让生成服务器知道它应该生成哪些 URL。
如果您需要担心正确的主机名,您需要按要求这样做:Liferay 能够很好地使用虚拟主机名来区分不同的站点 - 如果它们完全不同,您可能会登录到其中一个,但不是另一个。这对权限有影响。
让基础设施为您处理。不要为它编写代码(或应用程序配置)。
推荐阅读
- c - scanf 如何知道何时结束 for 循环?
- javascript - Javascript - 我的密码检查器不打印任何内容
- docker - 如何从一个 docker 容器 ssh 到另一个 docker 容器?
- kotlin - 错误代码 415 与改造
- r - chart.TimeSeries 不遮蔽期间区域
- oracle - 子区域中的 Oracle Apex 5.1 交互式网格消失
- keras - 使用卷积 LSTM 生成下一帧
- java - 我无法从 Firebase 获取值并将它们放入片段中的 TextView
- mysql - mysql - 来自子查询值列表的正则表达式
- python - 反复卷积两个大数组[python]