Программно используя j_security_check - PullRequest
2 голосов
/ 22 декабря 2011

У меня есть страница как localhost: 7001 / MyServlet. Я делаю HTTP-запрос на подключение, как показано ниже

String url = "http://localhost:7001/MyServlet"
PostMethod method = new PostMethod(url); 
HttpClient client = new HttpClient();

Однако «MyServlet» защищен j_security_check. Поэтому, когда я подключаюсь, меня перенаправляют на страницу входа.

Как пройти аутентификацию и получить доступ к моему URL, в одном HttpConnection

Примечание: я использую Apache Common httpclient

import org.apache.commons.httpclient.HttpClient; 
import org.apache.commons.httpclient.methods.PostMethod;

1 Ответ

0 голосов
/ 04 мая 2012

Я сомневаюсь, что вы можете войти в систему и вызвать сервер в одном запросе, если не включена HTTP BASIC аутентификация. Хотя я еще не знаю подробностей API HTTPClient, в основном вам нужно будет отслеживать сеанс с использованием файлов cookie; Разместите свой логин на /j_security_check; затем получите доступ к сервлету. (Тот же самый базовый процесс работает для /j_acegi_security_check, если используется ACEGI Security.)

Противная морщина в Tomcat - это то, что прямая публикация на /j_security_check дает 400 "плохих запросов"; его аутентификатор довольно привередлив в отношении переходов состояний и явно не был разработан с учетом требований программных клиентов. Вам необходимо сначала получить доступ к /loginEntry (вы можете выбросить ответ, кроме файлов cookie сеанса); затем опубликовать вашу регистрационную информацию на /j_security_check; затем следуйте за полученным перенаправлением (назад к /loginEntry я думаю), которое фактически сохранит вашу новую информацию для входа в систему; наконец-то опубликовать желаемый сервлет! NetBeans # 5c3cb7fb60fe показывает это при входе в действие на сервере Hudson с использованием аутентификации контейнера Tomcat.

...