|
|
|
Использование фильтров из Servlet API для шифрования HTTP-запроса
|
|||
|---|---|---|---|
|
#18+
Желаю здравствовать! Помогите, пожалуйста, разобраться со следующей проблемой. Тело HTTP-запроса (POST) поступает на сервер в зашифрованном виде. С помощью фильтра запрос перехватывается и расшифровывается, затем по цепочке передаётся сервлету (Tapestry ApplicationServlet). Для этой цели объект HttpServletRequest обёртывается с помощью подкласса HttpServletRequestWrapper, где содержимое входного потока (getInputStream()) считывается и переводится в массив байт (ByteArrayInputStream). Дальше производится расшифровка (собственно, эта часть пока отсутствует, тестирую в прозрачном режиме), и класс-обёртка в ответ на вызовы getInputStream и getReader возвращает уже расшифрованный запрос, соответственно, в виде потока или BufferedReader'а. Проблема в том, что сервлет данные (т.е. тело POST-запроса) не получает. В ходе длительных шаманских плясок с бубном выяснилось, что если сразу после получения объекта HttpServletRequest в фильтре вызвать у него метод getParameterNames() (см. листинг класса CryptFilter), то всё работает. Что это? Глюк? Или я чего-то не понимаю? В принципе, всё работает, но хотелось бы решить проблему осознанно :о) Класс CryptFilter: Код: plaintext 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. Класс-обёртка запроса: Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2007, 14:07:21 |
|
||
|
Использование фильтров из Servlet API для шифрования HTTP-запроса
|
|||
|---|---|---|---|
|
#18+
Насколько я понимаю здесь возникает проблема типа: Вы перехватываете поток ввода для обработки и он не анализируется стандартными средствами (т. е. из него не вычленяются данные запроса и не складываются в массив полученных данных). Это нормальная ситуация (см. использование метода getInputStream() интерфейса ServletRequest), т. е. либо Вы перехватываете поток ввода и сами его анализируете, либо поток ввода получает класс реализующий обработку запроса в контейнере сервлетов, который извлекает нужные данные и размещает их в соответствующих коллекциях. Вызвав метод getParameterNames() Вы обратились к стандартному обработчику потока ввода и он распарсил данные поместив их в соответствующую коллекцию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2007, 16:30:40 |
|
||
|
|

start [/forum/topic.php?fid=59&gotonew=1&tid=2144410]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
47ms |
get topic data: |
15ms |
get first new msg: |
11ms |
get forum data: |
5ms |
get page messages: |
63ms |
get tp. blocked users: |
3ms |
| others: | 318ms |
| total: | 498ms |

| 0 / 0 |
