2017-02-01 3 views
1

Мне интересно узнать больше об HTTP и о том, как работают прокси, путем создания моего собственного простого прокси-сервера с использованием Java 8 и Spring Boot. Статья, которую я прочитал (и заинтересована в ее реализации), - here. Три основные функции вперед прокси я заинтересован в являются:Внедрение прямого прокси-сервера в Java/Spring Boot

  • кэширование ресурсов: Если статический ресурс (CSS, JS, медиа-файл и т.д.) обращались и раньше, мы можем захватить его сразу локальная (файловая система) Прокси-сервера в кэше
  • трассировка пользователя/аудит: Мы можем проверить HTTP заголовки, чтобы увидеть, кто делает запрос, к которому целевой URL, и, возможно, записать эти записи доступа к бревну
  • Фильтрация содержимого : Фильтрация URL-адресов, возможно, проверка ответа с целевого сайта и tecting против вредоносных программ и т. д.

Целью является создание этого прокси-сервера в качестве приложения Spring Boot, его локального запуска, а затем настройка браузера для использования этого локального прокси-сервера. В конце концов я развожу его в нелокальную среду, но сначала сначала.

Я не очень беспокоюсь о деталях реализации этих функций - я могу понять, как их писать/реализовывать. Мне интересно: какая лучшая конструкция Spring/JavaEE для обеспечивает эти возможности? Фильтр сервлетов Java EE? Весенний контроллер? Некоторая другая (возможно, основанная на AOP) конструкция?

Опять же, идея для:

  1. настроить свой браузер, чтобы ударить локальный прокси-сервер, скажем, http://localhost:8080/myproxy
  2. В моем браузере я иду на сайт, скажем, http://example.com
  3. браузер передает HTTP-запрос (для http://example.com) на прокси-сервер, снова работает на http://localhost:8080/myproxy
  4. Прокси (в зависимости от используемой конструкции/механизма и того, как он настроен на поведение) может или не может проверять/quest
    • Например, если прокси-сервер настроен на использование кэша для статических ресурсов, он может проверить запрос, чтобы проверить, запрашивает ли его запрос (файл JS, файл CSS, файл IMG и т. д.), чтобы он ранее кэшировался. Если это запрос к кешированному документу, мы можем коротко замыкаться (обходить целевой сайт в целом) и просто отправить ответ (файл) обратно в браузер
  5. Прокси перенаправляет (или делает новый - ???) запрос на целевой сайт (http://example.com)
  6. целевой сайт отправляет обратно ответ HTTP к прокси
  7. прокси-(в зависимости от конструкта/механизма используется и как его сконфигурирован для себя) может или не может проверять/делать что-либо с этим ответом
    • Например, если прокси-сервер настроен для сканирования вредоносных программ, мы можем проверить ответ на двоичные данные, а если обнаружено, отправьте двоичный ответ на какой-либо сторонний инструмент сканера для анализа прохождения/провала и т. Д.
  8. Прокси отправляет ответ HTTP обратно в браузер

Я склонялся к сервлет фильтра или Спринг метода контроллера, но не уверен, что подходит для представления такого рода возможностей. Есть идеи?

ответ

0

Для учебных целей вы, вероятно, захотите избежать Spring и начать с реализации простого HttpServlet. Оттуда вы сможете проверить объект HttpServletRequest на любое количество вещей, включая его пересылку. Вы можете реализовать логику кэширования в самом сервлете, однако, вероятно, имеет смысл добавить ServletFilter, который улучшает сервлет с помощью поведения кэширования.