tomcat - AWS Elasticbeanstalk 上的 ALLOW_ENCODED_SLASH

标签 tomcat amazon-web-services amazon-elastic-beanstalk

我应该如何在 AWS 上配置我的 ElasticBeanstalk 以允许 URL 中的编码斜线? (使用 -Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true)

我在我的源包 (http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers.html) 的顶级目录中创建了一个名为 .ebextensions 的目录和一个文件 tomcat.config,其内容为:

commands:
  allow-encoded-slash:
    command: export CATALINA_OPTS="$CATALINA_OPTS -Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true"
    cwd: /home/ec2-user

但是好像没有效果,没有出现在这些目录中:

ls -la /tmp/deployment/application/ROOT/
ls -la /var/lib/tomcat7/webapps/ROOT/ 

最佳答案

我们还尝试通过 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

我完全不明白...:-/

关于tomcat - AWS Elasticbeanstalk 上的 ALLOW_ENCODED_SLASH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17231836/

相关文章:

amazon-web-services - CloudFormation 中应用程序负载均衡器的 AWS::WAFv2::WebACLAssociation ResourceArn

java - Tomcat 内存消耗

amazon-web-services - 如何使 Pyspark 脚本在 Amazon EMR 上运行以识别 boto3 模块?它说找不到模块

php - Elastic Beanstalk - 自定义 Nginx 配置文件 - PHP Web 应用程序

amazon-web-services - DynamoDB 是否支持悲观锁定?

java - AWS - 如何在 Java Web 应用程序的子域和域之间共享 session ?

django - 使用 Django 在部署的 EC2 服务器上托管 PostgreSQL 的 AWS Elastic Beanstalk

java - Wicket + Tomcat安装中 "resources"上下文路径如何协同工作

Tomcat:一个网络应用程序的两个上下文路径

java - IntelliJ IDEA 13 + Tomcat 7 部署