Веб-служба Java сохраняет кодирование на локальной машине, преобразует при разработке - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть эта странная проблема, с которой, я надеюсь, кто-то имеет некоторый опыт и может мне помочь.

У меня есть установка tomcat на моем компьютере, которую я использую для локального запуска, когда мне это нужно, нотогда я опубликую это для разработки.Тем не менее, кодировка URL ведет себя по-разному.

Например, HTTP-глагол выглядит следующим образом (в почтальоне удален нерелевантный остаток URL)

DELETE   .../AAASnsAATAALI%2F5AAK/20181114110451

На моей локальной машине я вижу этов localhost_access_log:

"DELETE ../AAASnsAATAALI%2F5AAK/20181114110451 HTTP/1.1" 400

(я ожидаю 400. Я узнал об org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH = true, который мне нужно установить благодаря StackOverflow, когдаЯ делаю, чтобы все работало нормально)

Однако я вижу это в localhost_access_log на компьютере разработчика:

 "DELETE ../AAASnsAATAALI/5AAK/20181114110451 HTTP/1.1" 404 1008

Что, конечно, я получаю 404, потому что что-то конвертирует этот% 2Fк / причиной моего неверного пути URL.

Я не понимаю, что может отличаться между моей машиной и машиной разработки.Я не думаю, что это может быть tomcat, так как я почти уверен, что у меня есть только что установленные из коробки установки (я сравнил свои catalina.properties и они одинаковые).Может ли это быть что-то в IIS, что вызывает это в окне разработки?Я уже давно почесал голову над этим, поэтому я надеюсь, что есть кто-то, с кем это случилось.

Любое руководство приветствуется.

РЕДАКТИРОВАТЬ:

Недавно я обнаружил, что если я сделаю вызов службы, ссылающийся непосредственно на tomcat, а не на предоставленный мне URL-адрес в интрасети, я получу ожидаемую ошибку 400.Поэтому я считаю, что для интранет-сайта должна быть настройка, которую необходимо изменить.Сейчас я прохожу через это, но не имею опыта.

1 Ответ

0 голосов
/ 16 ноября 2018

Таким образом, в случае, если кто-то столкнется с этим, я смог найти решение путем многочисленных проб и ошибок.

Для начала, это проблема, связанная с IIS.У меня недостаточно опыта, чтобы, вероятно, отвечать на конкретные вопросы, но я могу приложить все усилия, если они возникнут.

Я считаю, что это может быть проблема .NET 4.5 (возможно, 4.0), мы находимся на 4.7 во времяэтот ответ.Я слышал, что они намного строже своих URL в 4.5.По умолчанию IIS будет декодировать ваши закодированные URL-адреса.

Первое, что необходимо, это иметь модуль перезаписи URL-адресов в вашем диспетчере IIS (или иметь необходимые сведения о синтаксисе для редактирования файла web.config вашего сайта).)У нас не было этого, но я смог найти кого-то, кто смог бы надеть это.Новое правило должно быть добавлено в этот модуль.Я включил результат web.config этого правила, которое работает для меня:

<rewrite>
    <rules>
        <rule name="Keep Original Encoded URL String" stopProcessing="true">
            <match url="(.*)" />
            <conditions>
                <add input="{UNENCODED_URL}" pattern="(.*)" />
            </conditions>
            <action type="Rewrite" url="{C:0}" />
        </rule>
    </rules>
</rewrite>

По сути, это говорит о том, что возьми URL и верни незашифрованный URL.

Получение всего этого вне то, где это закончилось все же.После попытки ввести это правило я получил следующую ошибку:

A potentially dangerous Request.Path value was detected from the client (%) rewrite.

В версии 4.0 для URL-адреса по умолчанию указаны недопустимые символы.

< > * % & : \ ?

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

<system.web>
    <httpRuntime requestPathInvalidCharacters="<,>,*,&,:,\,?" />
</system.web>

После этого я смог получить 400 плохих запросов, которые я ожидал.И чтобы решить, что вы положили это в свой файл catalina.properties.

org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true

Это решение сработало для меня.Если кто-то видит проблемы с ними, пожалуйста, дайте мне знать, чтобы я мог их решить.Надеемся, что это решение подойдет для всех, у кого может быть проблема.

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