Форма многочастного запроса Post Encoding Apache - PullRequest
0 голосов
/ 24 мая 2019

У нас есть некоторые проблемы с кодировкой UTF-8 в многочастных формах.По умолчанию - application/x-www-form-urlencoded отлично работает.

У нас есть следующая структура:

Браузер -> WebServer (Apache) -> AppServer (Spring Boot / w Zuul для маршрутизации) -> ...

Мы отправляем многочастную форму enctype="multipart/form-data", в основном без файла.Вот как выглядит Браузер (Пример формы):

Form example

Так выглядят данные в приложении Spring

SystemOut     O DEFAULT ENCODING >>> UTF-8 ///request.getCharacterEncoding() 
SystemOut     O Request HEADER Name - Content-Length, Value - 254
SystemOut     O Request HEADER Name - Cache-Control, Value - max-age=0
SystemOut     O Request HEADER Name - Upgrade-Insecure-Requests, Value - 1
SystemOut     O Request HEADER Name - Content-Type, Value - multipart/form-     data; boundary=----WebKitFormBoundaryk2QfSBFSnZZ4om4N
SystemOut     O Request HEADER Name - User-Agent, Value - Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36
SystemOut     O Request HEADER Name - Accept, Value - text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
SystemOut     O Request HEADER Name - Accept-Encoding, Value - gzip, deflate, br
SystemOut     O Request HEADER Name - Accept-Language, Value - de,en-US;q=0.9,en;q=0.8
SystemOut     O Request HEADER Name - Front-End-Https, Value - on


SystemOut     O Request PARAMETER  Name - password, Value - Value_????
SystemOut     O Request PARAMETER  Name - username, Value - Key_??????

с "???"будучи оригинальными персонажами.

Мы определили фильтр для отладки (UTF8Filter, который печатает Sysout выше) в web.xml:

<!-- Set UTF-8 before request.getParameter() is called -->
    <filter>
        <filter-name>UTF8Filter</filter-name>
        <filter-class>something.UTF8Filter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>UTF8Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>


    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

, также мы экспериментировали с org.springframework.web.filter.CharacterEncodingFilter, как видно из web.xml.

Мы используем:

  • spring-boot 1.5.19.RELEASE
  • spring-cloud-starter-netflix-zuul 1.4.1.RELEASE

Apache 2.4 и имеет AddDefaultCharset utf-8.Кроме того, веб-сервер (Linux) имеет локаль с определенным utf-8.

Вопрос в том, как исправить / проанализировать (и исправить) это?

Примечание:
Это не та проблема, о которой говорилось здесь - FormHttpMessageConverter.MultipartHttpOutputMessage#getAsciiBytes(String), поскольку данные уже «разбиты» в первом фильтре в цепочке (UTF8Filter), до того какFormBodyWrapperFilter.По крайней мере, это то, что, кажется, предлагается журналами и отладкой.

...