【问题标题】:Request returning 400 bad request in Tomcat 8请求在 Tomcat 8 中返回 400 错误请求
【发布时间】:2021-08-04 17:28:52
【问题描述】:

我在 tomcat 中部署了一个 Java Web 应用程序。

如果我的 URL 是这样的,我会收到来自 Tomcat 8 的 400 Bad request

https://<serverurl>?cmisSelector=object&objectId=TyNGT0wjJSMwMDAjMDAjIyMj&filter=cmis:createdBy,a:b:ab,a:b:abc&renditionFilter=cmis:thumbnail,application/pdf,image/bmp,image/gif,image/jpeg,image/png

编码为

https%3A%2F%2F%3Cserverurl%3E%3FcmisSelector%3Dobject%26objectId%3DTyNGT0wjJSMwMDAjMDAjIyMj%26filter%3Dcmis%3AcreatedBy%2Ca%3Ab%3Aab%2Ca%3Ab%3Aabc%26renditionFilter%3Dcmis%3Athumbnail%2Capplication%2Fpdf%2Cimage%2Fbmp%2Cimage%2Fgif%2Cimage%2Fjpeg%2Cimage%2Fpng

但如果我从 URL 中删除 a:b:ab,a:b:abc 和 renditionFilter=cmis:thumbnail,application/pdf,image/bmp,image/gif,image/jpeg,image/png 然后它有效,这个 URL 的形成如下所示

https://<serverurl>?cmisSelector=object&objectId=TyNGT0wjJSMwMDAjMDAjIyMj&filter=cmis:createdBy

似乎是一些 URL 编码问题,但无法找出确切的问题。

【问题讨论】:

  • 难道我们不必用%3A 转义: 吗?
  • 是的,它只发生在 %3A 上
  • 试试https://&lt;serverurl&gt;?cmisSelector=object&amp;objectId=TyNGT0wjJSMwMDAjMDAjIyMj&amp;filter=cmis%3AcreatedBy%2Ca%3Ab%3Aab%2Ca%3Ab%3Aabc&amp;renditionFilter%3Dcmis%3Athumbnail%2Capplication%2Fpdf%2Cimage%2Fbmp%2Cimage%2Fgif%2Cimage%2Fjpeg%2Cimage%2Fpng

标签: java http tomcat urlencode


【解决方案1】:

默认情况下,如果 URL 分别包含正斜杠或反斜杠 / (%2F) 和 \ (%5C),Tomcat 将返回 HTTP 错误请求 (400)。这是作为一种安全措施。

您可以通过设置以下系统属性(例如在catalina.propertiesCATALINA_OPTS 中)禁用该功能并允许这些字符:

-Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true

### You may not need this one, as you only have forward slashes
-Dorg.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH=true

【讨论】:

  • 在最近的 Tomcat 中,最好在 &lt;Connector&gt; 上使用 encodedSolidusHandling 属性而不是系统属性,因为它可以基于每个连接器而不是全局设置。跨度>
猜你喜欢
  • 2017-08-06
  • 1970-01-01
  • 2019-07-28
  • 1970-01-01
  • 2017-03-29
  • 1970-01-01
  • 2019-07-11
  • 2015-04-06
  • 1970-01-01
相关资源
最近更新 更多