Проблема со специальными символами в заголовке запроса в Tomcat 9

После недавнего обновления до Tomcat 9 с Tomcat 8 у меня возникли проблемы с заголовком запроса, который содержит специальные символы, для моего случая символы «<» и «>». Ошибка гласит: «В цели запроса найден недопустимый символ. Допустимые символы определены в RFC 7230 и RFC 3986».

Я попытался найти способ и наткнулся на решение, в котором говорится, что я могу добавить "relaxedQueryChars="<,>" в файл server.xml моего сервера, но проблема с этим решением заключается в том, что нам не разрешено ничего редактировать в server, так как он управляется марионеткой, поэтому он просто перезаписывается каждый раз.

Есть ли способ добавить RelaxQueryChars="<,>" в мое приложение вместо того, чтобы добавлять его на сервер? Где-то, например, в context.xml или web.xml, я точно не знаю.

Сообщение об ошибке:

java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
    org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:467)
    org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:294)
    org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415)
    org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.base/java.lang.Thread.run(Thread.java:834)

Я думаю, что решение состоит в том, чтобы закодировать эти символы перед их отправкой на сервер (предположительно, но это кажется вероятным).

markspace 31.05.2019 04:07

Если проблема в том, что puppet перезаписывает его, вам нужно исправить это в развертывании puppet.

Mark Rotteveel 31.05.2019 21:57

Кодировка XML не вариант? Если вы можете контролировать то, что отправляется, просто не отправляйте недопустимые символы.

Stefan Falk 01.06.2019 10:39

Спасибо всем за помощь. Можно настроить марионетку, но я собираюсь просто обновить код и не отправлять недопустимые символы.

G Josh 03.06.2019 03:38
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
5
2 932
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Извини, нет. relaxedQueryChars — это атрибут Connector, поэтому его можно установить только в server.xml.

Возможные варианты включают в себя:

  • Исправление приложения для кодирования этих символов
  • Обновите конфигурацию Puppet, чтобы установить необходимое значение для relaxedQueryChars.

Спасибо! Да, похоже, я могу настроить Puppet для установки relaxedQueryChars Я также могу исправить это в приложении, кодирующем эти символы. Оба эти варианта кажутся жизнеспособными, и я просто обновлю свой код.

G Josh 03.06.2019 03:36

Другие вопросы по теме