我们还尝试通过 Elastic Beanstalk 控制台中的编辑配置对话框设置 ALLOW_ENCODED_SLASH 系统属性。但是,尽管该属性似乎存在,但 Tomcat 仍然不允许我们使用编码斜杠 (%2F)。
我们认为 ALLOW_ENCODED_SLASH 系统属性设置正确,因为:
1) 我们在启动 Tomcat 的 java 命令中看到该属性:
/usr/lib/jvm/jre/bin/java -DAWS_ACCESS_KEY_ID= -DAWS_SECRET_KEY= -DJDBC_CONNECTION_STRING= -DPARAM1= -DPARAM2= -DPARAM3= -DPARAM4= -DPARAM5= -Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true -Dhazelcast.native.client=true -Dcom.sun.management.jmxremote -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8765 -XX:MaxPermSize=256m -Xmx1024m -Xms256m -classpath :/usr/share/tomcat7/bin/bootstrap.jar:/usr/share/tomcat7/bin/tomcat-juli.jar:/usr/share/java/commons-daemon.jar -Dcatalina.base=/usr/share/tomcat7 -Dcatalina.home=/usr/share/tomcat7 -Djava.awt.headless=true -Djava.endorsed.dirs= -Djava.io.tmpdir=/var/cache/tomcat7/temp -Djava.util.logging.config.file=/usr/share/tomcat7/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager org.apache.catalina.startup.Bootstrap start
2)而且因为我们在从我们的网络应用程序执行时也得到了“真”:
System.getProperty("org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH")
有谁知道为什么 Tomcat 仍然拒绝编码斜杠?
例如,此 URL 应返回一个 JSON 表示“找不到应用程序:A/1”:
http://our-site/campaigns/application/A%2F1/udid/U1
但是,相反,它说:
在此服务器上找不到请求的 URL /v1/campaigns/application/A/1/udid/U1。
这很奇怪,因为我们已经在本地 Tomcat 中尝试了 ALLOW_ENCODED_SLASH 系统属性并且它工作正常。
最近我们尝试了另一个属性。这个适用于我的本地 Tomcat 和 AWS:
org.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH
我完全困惑... :-/