また、Elastic Beanstalk コンソールの [Edit Configuration] ダイアログから 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) また、Web アプリケーションからこれを実行すると「true」も取得されるため、次のようになります。
System.getProperty("org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH")
Tomcat がまだエンコードされたスラッシュを拒否している理由を知っている人はいますか?
たとえば、次の URL は「アプリケーションが見つかりません: A/1」という JSON を返す必要があります。
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
私は完全に困惑しています... :-/