Пустые строки были преобразованы в пустые строки после перехода на Tomcat 7 - PullRequest
1 голос
/ 25 марта 2019

Я столкнулся со странной проблемой.У нас есть старое приложение, которое было написано и развернуто на Tomcat 6. И теперь наша команда безопасности сказала, что Tomcat 6 - это EOL, и нам нужно перейти на новую версию Tomcat.

Я решил перенести это приложение с версии наверсии и с Tomcat 7 я столкнулся со странной проблемой.

В пользовательском интерфейсе у нас есть много различных HTML-форм, и некоторые поля в этих формах могут быть пустыми.С tomcat 6 такие поля были интерпретированы как нулевые значения.После перехода на tomcat 7 я получаю пустую строку вместо нулевого значения.

После некоторого поиска в Google я обнаружил, что люди предлагают указать такой параметр в web.xml:

    <context-param>
        <param-name>org.apache.el.parser.COERCE_TO_ZERO</param-name>
        <param-value>false</param-value>
    </context-param>

И это непомог

Также хочу упомянуть, что мы также используем Spring MVC в этом приложении.Но во время миграции я не изменил ни одну версию кода.Единственное, что я изменил, это версия tomcat

Обновление

Я обновил tomcat до последней доступной докеризированной версии (9.0.16-jre8).В результате у меня остается та же проблема.

Обновление 2

У меня нет неограниченного времени для этого билета, поэтому я решил вручную обновить / заменить все места, где мыпроверьте поля на null, чтобы начать, проверьте пустое значение.

Также я обнаружил, что начиная с версии 7 tomcat использует относительный путь для ссылок перенаправления, а в версии 6 Tomcat использует абсолютные ссылки по умолчанию (или он был настроен с некоторыми устаревшимиполе / свойство, которое было удалено в версии 7).

Если вы хотите включить логику для абсолютного пути, вам нужно указать атрибут useRelativeRedirects в конфигурации контекста:

<Context useRelativeRedirects="false" />

Еще один момент -что начиная с Tomcat 8 он поддерживает Rfc6265 и выдает исключение, если ваши куки имеют недопустимый формат (в нашем случае у нас есть куки, которые начинаются с .).В данный момент Tomcat поддерживает устаревший процессор cookie, но его можно удалить в будущих версиях.Чтобы включить устаревший процессор cookie, вам необходимо добавить такую ​​строку в конфигурации контекста:

<Context useRelativeRedirects="false">
    <CookieProcessor className="org.apache.tomcat.util.http.LegacyCookieProcessor" />
</Context>

Следующая вещь, также связанная с некоторыми новыми спецификациями, - это формат URL и параметры запроса.В случае, если вы запрашиваете в params какие-то специальные символы, запрашиваемые вами сбои в новых версиях Tomcat, а в логах вы просто увидите null вместо URL запроса.Чтобы это исправить, вам нужно добавить атрибут elaxedQueryChars для Connector в server.xml следующим образом:

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               URIEncoding="UTF-8"
               redirectPort="8443"
               elaxedQueryChars="&lt;&gt;[\]^&apos;{|}"/>

&lt;&gt;[\]^&apos;{|} == <>[\]'{|}

И последнее, что яОбнаружено, что некоторые слушатели, которые использовались в Tomcat6, были удалены в Tomcat7 +.Например, я удалил такие строки из server.xml:

<Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />
<Listener className="org.apache.catalina.core.JasperListener" />

Еще одна вещь.В новых версиях Tomcat у нас большой список банок, указанный в tomcat.util.scan.StandardJarScanFilter.jarsToSkip.При списке по умолчанию jstl библиотека перестает работать, так как по умолчанию она пропускается.Поэтому вам нужно удалить строки, связанные с jstl:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...