|
|
|
Spring MVC и русская кодировка
|
|||
|---|---|---|---|
|
#18+
Погодите смеяться, дорогие коллеги, и отправлять в FAQ! ))) Имеем веб-приложение Spring с аутентификацией через Spring Security. В коде нужно было реализовать дополнительные действия с авторизуемым пользователем, для чего был создан класс. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Так вот, если логин или пароль русскими символами, то строка создается некорректная - по два Character-a на символ. Так, допустим, пароль вводим "ааппрр" - 6 символов - получим "ааппÑ�Ñ�". Соответственно, getBytes() из такого пароля возвращает массив длиной 24 байта и, конечно же, неправильно хэшируется. В чём проблема? Кто портит кодировку? Устал уже копаться, помогите пожалуйста разобраться. Фильтры для корректной передачи юникода добавил. Tomcat-у настройки прописал. Пепельницу вытряхивал, по колёсам пинал... web.xml Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. security.xml Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2018, 16:13 |
|
||
|
Spring MVC и русская кодировка
|
|||
|---|---|---|---|
|
#18+
mesierТак, допустим, пароль вводим "ааппрр" - 6 символов - получим "ааппÑ�Ñ�".Вы работаете с юникодной строкой (кодировка utf8) как с массивом байт. Простейший способ так косячить - использовать однобайтовую кодировку. В вашем случае windows-1251. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2018, 16:23 |
|
||
|
Spring MVC и русская кодировка
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, Код: java 1. возвращает Object. Соответственно, toString() возвращает хрень.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2018, 16:28 |
|
||
|
Spring MVC и русская кодировка
|
|||
|---|---|---|---|
|
#18+
mesier, Для метода String.getBytes() нужно указывать кодировку. Его можно использовать без явного указания кодировки только в том случае, если ваш код может работать в разных средах и важно иметь байты именно в дефолтной кодировке. И, да, Василий прав. У вас имя пользователя было в UTF-8, но кто-то на каком-то этапе решил что это cp1251 и сформировал не верную строку. Нужно исследовать происхождение строки "ааппÑ�Ñ�" чтобы исправить её формирование. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2018, 16:31 |
|
||
|
Spring MVC и русская кодировка
|
|||
|---|---|---|---|
|
#18+
mesier, Попробуйте запустить jvm с явным указанием -Dfile.encoding ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2018, 16:34 |
|
||
|
Spring MVC и русская кодировка
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, JVM ? Или Tomcat ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2018, 16:47 |
|
||
|
Spring MVC и русская кодировка
|
|||
|---|---|---|---|
|
#18+
mesier, а у вас Tomcat без JVM умудряется работать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2018, 17:08 |
|
||
|
Spring MVC и русская кодировка
|
|||
|---|---|---|---|
|
#18+
Что-то -Dfile.encoding=UTF-8 пока не помогло.. (( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2018, 17:35 |
|
||
|
Spring MVC и русская кодировка
|
|||
|---|---|---|---|
|
#18+
mesierФильтры для корректной передачи юникода добавил.Проблема, возможно - в фильтре. Согласно документации Spring 4.3.5 : This filter can either apply its encoding if the request does not already specify an encoding, or enforce this filter's encoding in any case ("forceEncoding"="true"). Что "применить, если не указано", что "всегда применить" - косяк для целого ряда сценариев. В общем, я бы фильтр убрал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2018, 23:14 |
|
||
|
Spring MVC и русская кодировка
|
|||
|---|---|---|---|
|
#18+
Мы так и не определились откуда имя-то берется. Kerberos намекает на то что из AD. Но если всякие там фильтры влияют, то имя берется из параметров запроса? Тогда, может, Tomcat server.xml подкрутить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2018, 08:10 |
|
||
|
Spring MVC и русская кодировка
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, я пробовал убирать фильтры. Тоже не помогает.. С утра появилась свежая мысль обновить Спринг, подтянуть версию посвежее. Ща попробую. )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2018, 08:47 |
|
||
|
Spring MVC и русская кодировка
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, да, это всё ещё до аутентификации происходит. Так что из формы. Собственно сценарий аутентификации таков, что если юзверь ставит галочку на форме "авторизация в домене" и вводил логин вида "ADNAME\username", то проверяем через керберос в домене. Если нет, то в БД. В server.xml Код: xml 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2018, 08:55 |
|
||
|
Spring MVC и русская кодировка
|
|||
|---|---|---|---|
|
#18+
Включайте отладку или в браузере или на котяре и смотрите, какие заголовки отправляются/приходят. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2018, 11:27 |
|
||
|
Spring MVC и русская кодировка
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, ну вот как-то так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2018, 14:16 |
|
||
|
Spring MVC и русская кодировка
|
|||
|---|---|---|---|
|
#18+
Когда-то подобные проблемы были с GET-запросами. Ни URIEncoding в коннекторе ни фильтр не помогли. Плюнул, сделал отправку всего, что может содержать не-Latin1, POST-запросами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2018, 14:24 |
|
||
|
Spring MVC и русская кодировка
|
|||
|---|---|---|---|
|
#18+
Alexander A. Sak, так это и есть post-запрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2018, 14:28 |
|
||
|
Spring MVC и русская кодировка
|
|||
|---|---|---|---|
|
#18+
mesierну вот как-то так... и похоже, что тело запроса (данные формы) декодируется, а потом эти байты читаются как windows-1251. И windows-1251 и utf-8 совпадают в диапазоне US-ASCII, а вот дальше - начинаются различия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2018, 15:03 |
|
||
|
Spring MVC и русская кодировка
|
|||
|---|---|---|---|
|
#18+
mesier, Пароль смахивает на UTF-8 кодировку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2018, 15:07 |
|
||
|
Spring MVC и русская кодировка
|
|||
|---|---|---|---|
|
#18+
И говорю - "проценты" декодировали в байты и, почему-то, обработали эти байты, как windows-1251, хотя там чистый utf-8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2018, 15:09 |
|
||
|
Spring MVC и русская кодировка
|
|||
|---|---|---|---|
|
#18+
сначала определитесь что за кодировка там у вас. к примеру на гласфише у нас попа вот такая вот, приходится конвертить в контроллере сразу. если это сунуть на томкат, то работать не будет. раньше по контексту менялось, сейчас забил и локально тоже глассфиш юзаю. примерно вот так получается: Код: java 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2018, 15:09 |
|
||
|
Spring MVC и русская кодировка
|
|||
|---|---|---|---|
|
#18+
Nixicпримерно вот так получается: Костыль. Некоторые символы пропадают таким образом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2018, 15:12 |
|
||
|
Spring MVC и русская кодировка
|
|||
|---|---|---|---|
|
#18+
Кароч, в web.xml фильтр CharacterEncodingFilter должен стоять первым в цепочке фильтров. Что важно, вместе с секцией filter-mapping. А у меня первым стоял springSecurityFilterChain. После перемены мест, заработало.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.03.2018, 11:33 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39617602&tid=2122151]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
149ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 262ms |
| total: | 507ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...