Как сделать этот метод получения REST в Java? - PullRequest
3 голосов
/ 11 октября 2011

У меня есть следующий запрос на получение REST, который успешно работает:

enter image description here

В результате получается XML-документ, который я затем хочу проанализировать. Я попробовал то же самое в Java:

Я использую следующий код:

public void getRootService() throws ClientProtocolException, IOException {

    HttpGet httpGet = new HttpGet("https://localhost:9443/ccm/rootservices");
    httpGet.setHeader("Accept", "text/xml");
    HttpResponse response = client.execute(httpGet);
    HttpEntity entity = response.getEntity();
    InputStream in = entity.getContent();
    String projectURL = XMLDocumentParser.parseDocument(in);

    System.out.println(projectURL);
    HttpGet getProjectsRequest = new HttpGet("https://localhost:9443/ccm/process/project-areas");
    getProjectsRequest.setHeader("Content-Type", "application/xml;charset=UTF-8");
    getProjectsRequest.setHeader("Accept-Charset", "UTF-8");
    getProjectsRequest.setHeader("Accept", "application/xml");


    ResponseHandler<String> handler = new BasicResponseHandler();
    String projectResponse = client.execute(getProjectsRequest, handler);
    //String projectResponse = client.execute(getProjectsRequest, handler);

    System.out.println(projectResponse);

}

Но как я могу сделать аутентификацию? Я попытался просто добавить другое поле заголовка для значения «Авторизация», но тогда я не получил тот же результат.

Ответы [ 4 ]

5 голосов
/ 11 октября 2011

Я думаю, вам нужно создать UsernamePasswordCredentials, что-то вроде (не проверено);

CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(
    new AuthScope("somehost", AuthScope.ANY_PORT), 
    new UsernamePasswordCredentials("username", "password"));

HttpClient httpclient = new DefaultHttpClient();
httpclient.setCredentialsProvider(credsProvider);

См. http://hc.apache.org/httpcomponents-client-ga/tutorial/html/authentication.html

Редактировать:
Только что попробовалследующий код и успешно вызвал службу REST в нашей среде разработки, которая защищена Бейсиком.

public static void main(String[] args) throws ClientProtocolException, IOException {
    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials(
        new AuthScope("dev.*******.com", AuthScope.ANY_PORT), 
        new UsernamePasswordCredentials("*****", "******"));


    DefaultHttpClient client = new DefaultHttpClient();
    client.setCredentialsProvider(credsProvider);

    String url = "http://dev.******.com:18081/path/to/service/id.xml";

    HttpGet get = new HttpGet(url);
    ResponseHandler<String> handler = new BasicResponseHandler();
    String resp = client.execute(get, handler);

    System.out.println(resp);
  }
3 голосов
/ 11 октября 2011

Вы можете явно добавить заголовок Authorization к HttpRequestBase (абстрактный класс для HttpGet, HttpPost и т. Д.)

В этом примере показано, как создается значение базовой авторизации.

String unhashedString = userName + ":" + password;
String hashedString = Base64.encode(unhashedString); //This class doesn't exist, it's for demonstration purpose only.

HttpGet.setHeader("Authorization", "Basic " + hashedString);

На сервере вам придется делать обратное (если вы делаете свою собственную реализацию.

1 голос
/ 11 октября 2011

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

0 голосов
/ 29 августа 2016

Поддерживаемый механизм аутентификации будет зависеть от того, какой веб-сервер используется для размещения Rational Team Concert.Сервер Apache Tomcat использует базовую аутентификацию, тогда как WebSphere Application Server поддерживает как базовую аутентификацию, так и аутентификацию на основе форм.

Подробное описание можно посмотреть здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...