Открытие защищенного паролем сайта из сервлета - PullRequest
1 голос
/ 25 июня 2009

Предполагается, что пользователь получит доступ к сервлету (например, http://someip/myservlet), который, в свою очередь, аутентифицирует защищенный паролем веб-сайт (например, mysite.com - который размещен на Сервер IIS с Использовать проверку подлинности Windows включен) неявно, а затем открывает , что mysite.com - так, что:

  1. целевым пользователям не будет предложено ввести имя пользователя и пароль, поскольку он будет проходить через сервлет (размещенный на каком-либо сервере, например tomcat)
  2. любой другой пользователь, имеющий доступ к тексту ссылки , не сможет получить доступ без знания учетных данных

Требование ( это должно открыть, что веб-сайт не получает контент , так как mysite.com имеет динамическую функциональность)

Возможно ли это на Java (HttpURLConnection) ??

любая помощь приветствуется.

Спасибо.

Ответы [ 3 ]

1 голос
/ 25 июня 2009

Кажется, что функциональность, которую вы хотите реализовать, покрыта HTTP прокси-серверами . Этот вид прокси «зеркалирует» некоторый сайт site1.domain1.com в другом месте, например site2.domain2.com

Наиболее распространенные сценарии использования: сайт1 не является общедоступным, а обратный прокси-сервер будет действовать как шлюз, балансировщик нагрузки, шлюз SSL или аналогичный.

Для реализации на Java: я также рекомендую HTTP-клиент Apache . И с этой клиентской библиотекой можно использовать проверку подлинности NTLM.

1 голос
/ 25 июня 2009

Чтобы убедиться, что я понял вашу потребность, вот краткое изложение: вы хотите, чтобы данный пользователь A подключился к вашему первому серверу Server1.domain1.com, который будет подключаться (изнутри java-сервера) ко второму серверу server2.domain2.com (в настоящее время под IIS). Затем server1 будет перенаправлять пользователя на веб-страницу server2, при этом задача состоит в том, чтобы избежать любого всплывающего окна аутентификации.

Основная проблема заключается в передаче с сервера1 в клиентский браузер, затем из клиентского браузера в сервер2 билета аутентификации, который сервер1 получил от сервера2.

Это не проблема Java, а проблема глобальной сети. Действительно, единственная информация, полученная сервером2 для идентификации пользователя клиента, находится в потоке http, в двух словах: IP-адрес, URL-адрес и файлы cookie.

Cookies - это тупик, если server1 и server2 не являются одним и тем же доменом (см. RFC 2109: http://www.ietf.org/rfc/rfc2109.txt),, поскольку браузер будет отправлять cookie-файлы на сервер данного домена, только если cookie-файл был возвращен с сервера ( то же или другое) того же домена.

Таким образом, ответ состоит из двух этапов:

  • Во-первых, server1 должен получить sessionID от server2, возможно, путем отправки http-запроса с соответствующими учетными данными (basic-auth «поля формы» или, что еще хуже, «Windows like domain auth»?). Для этого шага я предлагаю использовать библиотеку apache httpclient.
  • Во-вторых, server1 должен перенаправить пользователя клиента на соответствующий URL-адрес server2, который будет включать sessionID в качестве аргумента. Это требует, чтобы server2 предлагал такую ​​возможность войти.

С первого взгляда я не вижу другого простого решения.

0 голосов
/ 25 июня 2009

Встроенного HTTPURLConnection может быть недостаточно, если вы действительно хотите реализовать такую ​​пересылку запросов. Попробуйте Apache HTTPClient , который имеет множество параметров настройки. Вы также можете найти решения для пересылки TCP или в этом сообщении .

...