Как заставить Apache Tomcat 8.0.41 разрешать символ канала в запросе URL GET?

Вот ошибка, когда я пытаюсь отправить запрос GET с URL-адресом в моем веб-приложении Java: URL-адрес моего локального компьютера выглядит следующим образом: http://localhost:8080/test?param1=1|2¶m2=3343434

20 февраля 2017 г. 16:51:19 org.apache.coyote.http11.AbstractHttp11Processor process INFO: Ошибка анализа заголовка HTTP-запроса Примечание. Дальнейшие случаи ошибок анализа заголовка HTTP будут регистрироваться на уровне DEBUG. java.lang.IllegalArgumentException: в цели запроса обнаружен недопустимый символ. Допустимые символы определены в RFC 7230 и RFC 3986 в org.apache.coyote.http11.AbstractNioInputBuffer.parseRequestLine(AbstractNioInputBuffer.java:283) в org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1017) в org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684) в org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1524) в org.apache.tomcat.util. net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1480) в java.util.concurrent.ThreadPoolExecutor.runWorker(неизвестный источник) в java.util.concurrent.ThreadPoolExecutor$Worker.run(неизвестный источник) в org.apache.tomcat .util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) на java.lang.Thread.run(неизвестный источник)

Я хотел бы спросить, возможно ли решить эту проблему, не меняя версию Apache Tomcat или не внося изменения в мой существующий код. Мне было интересно, может ли этот файл конфигурации Apache Tomcat отключить или обойти эту проверку?


person lastkoh    schedule 20.02.2017    source источник


Ответы (2)



Я ломал голову над этим весь последний день. Я пытался использовать mod_rewrite в tomcat, пытаясь urlencode '|' при входе, но ошибка сохраняется, поскольку она возникает до того, как она достигает механизма перезаписи. Так что не повезло. Единственные два рабочих решения, которые я нашел:

  1. Поместите прокси-сервер перед вашим tomcat (nginx), который может urlencode pipe без создания разумного исключения IllegalArgumentException.
  2. Измените версию Tomcat (не все из них выдают разумные исключения IllegalArgumentException с каналом). На момент написания этого я могу подтвердить, что последняя версия 8.5.11 выдает разумное исключение IllegalArgumentException, но 8.5.5 работает нормально.
person Radu Luncasu    schedule 23.02.2017
comment
IllegalArgumentException — это не сбой, а обоснованный отказ от неверных данных. Смотрите ответ Доминика. - person Seven; 12.06.2017
comment
@Seven: я отредактировал ответ, чтобы он был таким же точным, как швейцарские атомные часы. - person Radu Luncasu; 06.07.2017