Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вызов с JSP .NET WebService, проблема авторизации 
:(
    Опции темы
deviantus
  Дата 12.2.2007, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 12.2.2007

Репутация: нет
Всего: нет



Нужно вызвать .NET WebService через JSP страничку.
Делаю все как описано тут:
http://www.c-sharpcorner.com/UploadFile/an...a7-a751ed3ada85
Все работает, если сервис без авторизации.

Но мне нужно получить доступ к веб-сервису под Windows авторизацией.

Как авторизировать?  smile 
PM MAIL   Вверх
deviantus
Дата 13.2.2007, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 12.2.2007

Репутация: нет
Всего: нет



Проблема решена! Накодил вот такое:

Код

package NETWebServiceConnector;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

// Use Apache HTTPclient package
import org.apache.commons.httpclient.Credentials;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.NTCredentials;
import org.apache.commons.httpclient.auth.AuthPolicy;
import org.apache.commons.httpclient.auth.AuthScope;
import org.apache.commons.httpclient.methods.PostMethod;

/**
 * This Class call a .NET WebService with NTLM authentication
 */
public class NETWebServiceConnector {

    // WebService URL
    private String webServiceURL;
    
    // WebService namespace
    private String webServiceNamespace;
    
    // WebService method answer
    private String webServiceAnswer;
    
    // HTTP Client object
    private HttpClient client = new HttpClient();
    
    // Constructor initialize fields
    public NETWebServiceConnector(String wsURL, String wsNamespace) {
        this.webServiceURL = wsURL;
        this.webServiceNamespace = wsNamespace;
    }

    // Provide NTLMA authentication
    public void NTLMAuthorise(String authUser, String authPassword, String authHostname, String authDomain) {
        // Create credentials
        Credentials credentials = new NTCredentials(authUser, authPassword, authHostname, authDomain);
        
        // Set authentication type
        List authPrefs = new ArrayList(1);
        authPrefs.add(AuthPolicy.NTLM);
        client.getParams().setParameter(AuthPolicy.AUTH_SCHEME_PRIORITY, authPrefs);
        client.getParams().setAuthenticationPreemptive(true);
        
        // Set credentials
        client.getState().setCredentials(AuthScope.ANY, credentials);
    }

    // Return WebService method response
    public String getResponse() {
        return this.webServiceAnswer;
    }
    
    // Call WebService Method with parameters
    public String executeMethod(String webServiceMethod, String[] webServiceParameters, String[] webServiceValues) {
     // Use POST request method
     PostMethod method = new PostMethod(this.webServiceURL);
     
     // Add to headers SOAPAction
     method.addRequestHeader("SOAPAction", '"' + this.webServiceNamespace + '/' + webServiceMethod + '"');
     
     // Add to headers correct content type
     method.addRequestHeader("Content-Type", "text/xml; charset=utf-8");

     // Generate SOAP request
     String SOAPRequest = "";
     
     SOAPRequest += "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
     SOAPRequest += "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n";
     SOAPRequest += "<soap:Body>\n";
     
     SOAPRequest += "<" + webServiceMethod + " xmlns=\"" + this.webServiceNamespace + "\">\n";

        // Put WebService method parameters and values
        for (int i = 0; i < webServiceParameters.length; i++)
        {
            SOAPRequest += ("<" + webServiceParameters[i] + ">" + webServiceValues[i] + "</" + webServiceParameters[i] + ">\n");
        }

     SOAPRequest += "</" + webServiceMethod + ">\n";

     SOAPRequest += "</soap:Body>\n";
     SOAPRequest += "</soap:Envelope>";
     
     // Set correct content length
     method.setRequestContentLength(SOAPRequest.length());
     
     // Put SOAP request to HTTP POST request body
     method.setRequestBody(SOAPRequest);

        try {
            // Execute the POST method
            int statusCode = client.executeMethod(method);

            // Check HTTP response code
            if (statusCode != HttpStatus.SC_OK) {
             return "Method failed: " + method.getStatusLine();
            }
            
            // Read the response body
            byte[] responseBody = method.getResponseBody();
            String answer = new String(responseBody);
            
            // Get method result
            String methodTagResult = webServiceMethod + "Result";
            
            int startPosResult = answer.indexOf("<" + methodTagResult + ">");
            int endPosResult = answer.indexOf("</" + methodTagResult + ">");
            
            if (startPosResult != -1 && endPosResult != -1) {
                startPosResult += methodTagResult.length() + 2;
                this.webServiceAnswer = answer.substring(startPosResult, endPosResult);
            }
            else {
             this.webServiceAnswer = answer;
            }

            return "WebService called successfully.";
        } catch (HttpException e) {
           return "Fatal protocol violation: " + e.getMessage();
        } catch (IOException e) {
           return "Fatal transport error: " + e.getMessage();
        } finally {
           method.releaseConnection();
        }
    }
}


Елси есть что прокомментировать - пишите! ;)
PM MAIL   Вверх
AntonioBanderaz
Дата 14.2.2007, 02:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 18



deviantus, зачем формировать SOAP пакет руками... есть же AXIS... wsdl2java сгенерит проксю для этого сервиса, в которую ты уже сам добавишь что нужно... 


--------------------
ГЫ... 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0415 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.