Стандарт Java сервлетов плачевно бедных на поддержку Unicode. Значение по умолчанию ISO-8859-1 бесполезно, и до сих пор нет совместимых с контейнером средств для настройки его на что-то еще.
Метод фильтра в ответе matteosilv
работает для органов запроса. Для параметров в URL-адресе вы должны использовать параметры, специфичные для контейнера. Например, в Tomcat, установить URIEncoding
на <Connector>
в server.xml
; в Glassfish Это <parameter-encoding>
в glassfish-web.xml
.
(Если вы должны работать в полностью кросс-контейнером совместимы образом вы в конечном итоге того, чтобы написать свою собственную реализацию getParameter()
, которая печально. Bad Servlet.)
Однако в любом случае плохая идея передать поля формы входа в параметры GET URL.
Это, во-первых, потому, что логин вызывает изменение состояния, поэтому оно не является «идемпотентным». Это делает GET неподходящим методом и вызывает нагрузку на такие практические проблемы, как потенциальная запись в журнал при навигации по странице или невозможность входа в систему из-за кэширования и т. Д.
Во-вторых, существует множество способов, по которым URL-адреса могут «течь», включая отслеживание рефереров, протоколирование, прокси и сохранение истории браузера. Следовательно, вы никогда не должны помещать какие-либо конфиденциальные данные, такие как пароль в URL-адрес, в том числе в форме формы GET.
Вместо этого я предлагаю использовать форму отправки POST вместе с CharacterEncodingFilter
.
Эта проблема возникает и для меня. У нас есть стандартная форма входа в систему POSTing для Spring Security, и как только пароль содержит что-либо вроде öäüéàè, вход в систему невозможен. Проблема возникает с пользовательским интерфейсом UserDetailsService на основе hibernate, а также с базовым компонентом ActiveDirectory на базе Ldap. – yglodt