#java #http #tomcat #urlencode
Вопрос:
У меня есть веб-приложение Java, развернутое в tomcat.
Я получаю 400 неверных запросов от Tomcat 8, если мой URL такой
https://<serverurl>?cmisSelector=objectamp;objectId=TyNGT0wjJSMwMDAjMDAjIyMjamp;filter=cmis:createdBy,a:b:ab,a:b:abcamp;renditionFilter=cmis:thumbnail,application/pdf,image/bmp,image/gif,image/jpeg,image/png
Который кодируется как
https://?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
Но если я удалю a:b:ab,a:b:abc и renditionFilter=cmis:миниатюра,приложение/pdf,изображение/bmp,изображение/gif,изображение/jpeg,изображение/png из URL-адреса, то это сработает, этот URL будет сформирован, как показано ниже
https://<serverurl>?cmisSelector=objectamp;objectId=TyNGT0wjJSMwMDAjMDAjIyMjamp;filter=cmis:createdBy
Кажется, есть какая-то проблема с кодировкой URL, но я не могу выяснить точную проблему.
Комментарии:
1. Разве мы не должны сбежать от
:
с:
?2. да, это происходит только с :
3. Попробуй
https://<serverurl>?cmisSelector=objectamp;objectId=TyNGT0wjJSMwMDAjMDAjIyMjamp;filter=cmis:createdBy,a:b:ab,a:b:abcamp;renditionFilter=cmis:thumbnail,application/pdf,image/bmp,image/gif,image/jpeg,image/png
Ответ №1:
По умолчанию Tomcat возвращает HTTP-неверный запрос (400), если URL-адрес содержит прямую или обратную косую /
черту (/) и
() соответственно. Это делается в качестве меры безопасности.
Вы можете отключить эту функцию и разрешить эти символы, установив следующие системные свойства (например, в catalina.properties
или в CATALINA_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
Комментарии:
1. В недавних Tomcats было бы лучше использовать
encodedSolidusHandling
атрибут на вашем<Connector>
, а не системном свойстве, потому что его можно устанавливать для каждого соединителя, а не глобально.