Проверка поведения для URL, содержащих знак плюса

Это правило помечает URL, содержащие знак плюса ("+") за пределами параметров запроса URL. В коде Java правило ищет конструкторы java.net.URL и проверяет параметры, используемые для создания URL. Правило ищет в URL знаки плюса за пределами параметров запроса. Параметры запроса включают в себя все справа от "?" в URL.

До WebSphere Application Server версии 5.1 при декодировании URL декодировался весь URL, а не только параметры запроса. Это было неправильно, поэтому в веб-контейнер были внесены изменения, чтобы знак плюса больше не интерпретировался как специальный символ, когда он указан не в параметрах запроса. Данное изменение привело к регрессионным ошибкам в приложениях, и в версии 5.1.1.11 было добавлено пользовательское свойство веб-контейнера, позволяющее управлять декодированием плюса. По умолчанию в этом пользовательском свойстве указано значение, соответствующее прежнему поведению, то есть плюс декодируется в любом месте URL.

Если есть URL, содержащие плюс, который не должен декодироваться, то в пользовательском свойстве веб-контейнера com.ibm.ws.webcontainer.decodeURLPlusSign следует указать значение false. По умолчанию указано значение true.

Правило для Java проверяет конструкторы URL и по возможности проверяет параметры spec, host и file в них на наличие знаков плюса. Правило проверяет конструкторы, в которые передаются строковые литералы или переменные типа String со спецификатором final, определенные в той же единице компиляции. Если есть возможность проверить параметры spec, host или file, то помечаются только те конструкторы, которые нарушают правило.

Правило для Java также помечает вызовы конструктора URL, у которых в параметре spec, host или file указана переменная, и ее невозможно проверить.

Пример 1.


import java.net.URL;

URL url = new URL("http://www.domain.com?id=test&name=plus+sign");
}

В примере 1 правило не помечает конструктор URL, поскольку знак плюса находится в параметрах запроса.

Пример 2:


import java.net.URL;

URL url = new URL("http://www.domain.com/plus+path?id=test&name=ok");
}

В примере 2 правило помечает конструктор URL, так как знак плюса находится в пути URL.

См. документацию Java по java.net.URL.