我有一个wildfly21.0.0.final运行一个spring boot rest应用程序,我遇到了一个奇怪的行为 GET
请求包含 |
查询参数中的(管道)字符。 |
根据http的rfc1738规范,(管道)字符是不安全的,而rfc3986允许对unicode字符进行编码。
但是,wildfly(undertow)有一个选项 http-listener
以及 https-listener
进入 allow-unescaped-characters-in-url
.
这就是我的下拖子系统在wildlfy中的样子 standalone.xml
:
<subsystem xmlns="urn:jboss:domain:undertow:11.0" default-server="default-server" default-virtual-host="default-host" default-servlet-container="default" default-security-domain="other">
<buffer-cache name="default"/>
<server name="default-server">
<http-listener name="default" socket-binding="http" allow-unescaped-characters-in-url="true" redirect-socket="https" enable-http2="true"/>
<https-listener name="https" socket-binding="https" max-post-size="1048576000" allow-unescaped-characters-in-url="true" ssl-context="LocalhostSslContext" enable-http2="true"/>
<host name="default-host" alias="localhost">
<http-invoker http-authentication-factory="application-http-authentication"/>
</host>
</server>
<servlet-container name="default">
<jsp-config/>
<websockets/>
</servlet-container>
<application-security-domains>
<application-security-domain name="other" http-authentication-factory="keycloak-http-authentication"/>
</application-security-domains>
</subsystem>
完全 standalone.xml
这里有隐藏的敏感信息。
应用程序正在上运行 127.0.0.1:443
,并作为https://myappname.company.com via 脉冲安全负载平衡器,其中 myappname
是否在上注册了cname company.com
dns,指向负载均衡器vip。
这个 allow-unescaped-characters-in-url="true"
bit在这些情况下工作正常(因此当请求包含 |
不能穿过Windows hosts
文件,但通过负载平衡器)。
但是,当我在windows中添加一个条目时 hosts
文件以绕过负载平衡器,例如:
127.0.0.1 myappname.company.com
…然后 GET
请求包含 |
在它的查询参数中将不起作用-事实上,它看起来甚至没有击中服务器,就像wildfly/undertow的一样 allow-unescaped-characters-in-url="true"
布景根本就不在那里。
现在我们的本地测试出现了问题。我们能做些什么改变吗 allow-unescaped-characters-in-url="true"
会一直受到尊重吗?我们知道这一点 |
应编码为 %7D
,但我们会对一个解决方案感兴趣(最好是在wildfly级别上),该解决方案将 allow-unescaped-characters-in-url="true"
无论请求是否通过,每次都要工作 hosts
文件或负载平衡器。
非常奇怪的是,它在wildfly 15.0.1.final中运行良好,即使没有 allow-unescaped-characters-in-url="true"
处于 standalone.xml
.
暂无答案!
目前还没有任何答案,快来回答吧!