Как использовать xml из веб-сервиса с использованием аутентификации?

Я пытаюсь вызвать службу REST (требующую аутентификации) из моего приложения для Android. Я уже делаю это успешно с URL-адресом, который не требует аутентификации, но я не уверен в правильном подходе к аутентификации. В настоящее время я использую xml с помощью Sax Parser и вызываю url.openStream() следующим образом:

QuestionHandler myQuestionHandler = new QuestionHandler();
XMLReader xr = SAXParserFactory.newInstance().newSAXParser().getXMLReader();
xr.setContentHandler(myQuestionHandler);
xr.parse(new InputSource(new URL('MyUnAuthenticatedURL').openStream()));

handler.post(new Runnable() {
  public void run() {
    recentQuestions = myQuestionHandler.getResultList();
    loadQuestions = false;
    fillData();
  }
});

Я читал, что мне следует использовать org.apache.http.impl.client.DefaultHttpClient, чтобы воспользоваться преимуществами базовой аутентификации HTTP с использованием файлов cookie сеанса по умолчанию, но я не понимаю, как это должно быть сделано в сочетании с парсером Sax.

Основная цель здесь заключается в том, что я хочу вызвать URL-адрес, для которого требуется аутентифицированное имя пользователя, и чтобы этот URL-адрес возвращал XML, если имя пользователя аутентифицируется с помощью пароля.


person JohnRock    schedule 08.02.2010    source источник


Ответы (1)


Кажется, я выполнил то, о чем вы просите в ChandlerQE. См. ChandlerQE.java для метода run(). Код не очень красивый, но в основном я использую httpclient для публикации и получения, а также для анализа возвращенного XML с помощью SAXParser.

person Heikki Toivonen    schedule 08.02.2010
comment
Спасибо за ваш пример кода. Я пытаюсь следовать вашему примеру, но я запутался, потому что вы ожидаете HttpResonse, а мой веб-сервис настроен на возврат javax.ws.rs.core.Response - (с использованием spring и CXF). Какой тип ответа мне нужно вернуть? - person JohnRock; 11.02.2010
comment
Я сбит с толку. Какая разница на стороне клиента Android, что вы используете на стороне сервера для отправки ответа? Ответ - это просто текст по проводу/эфиру. - person Heikki Toivonen; 11.02.2010
comment
Да, ты прав. Извините, я был смущен этим на минуту. Я думал, что должен вернуть объект ответа того же типа, который ожидал получить клиент, но, видимо, это не имеет значения. - person JohnRock; 12.02.2010
comment
Прохладный. Если мой ответ сработал для вас, отметьте его как принятый ответ. Эти статистические данные могут определить, насколько вероятно, что люди будут отвечать на ваши вопросы в будущем. - person Heikki Toivonen; 12.02.2010
comment
Да. Ваш ответ помог мне с первой частью моего вопроса. Часть, о которой я все еще не понимаю, заключается в том, как заставить мой веб-сервис использовать учетные данные безопасности, переданные в httpclient, для аутентификации пользователя, а также передать принципала в вызов метода веб-сервиса (использование Spring Security). Я разместил несколько других вопросов на StackOverflow, уточняя это. Если у вас есть опыт в этом, я был бы признателен, если бы вы могли ответить на эти вопросы. Благодарю вас! - person JohnRock; 13.02.2010