2016-04-12 2 views
1

Я хочу вызвать веб-службу .NET на основе клиентского кода Java. Я создал JAX-WS-заглушки, используя инструмент wsimport.Как вызвать веб-сервис .Net на основе Java-клиента с проверкой подлинности NTLM

Это как учетные данные создаются в .NET Client-

NetworkCredential credential = new NetworkCredential(userName, password, "domain"); 
client.ClientCredentials.Windows.ClientCredential = credential ; 

Как мы делаем это так же в клиенте Java? Я много искал и нашел несколько сообщений, предлагающих протестировать NTLM, но я не уверен, как это сделать.

ответ

0

аутентификации NTLM не поддерживается JAX-WS, но вы по-прежнему есть несколько альтернатив

Альтернатива 1: Создать свой собственный аутентификатор и установить его по умолчанию, он будет использоваться для всех вас HTTP связи , Используйте эту альтернативу, только если связь является сервером server2, поскольку использовать несколько учетных записей нескольких пользователей нецелесообразно. Вы можете увидеть код, как реализовать его здесь: http://docs.oracle.com/javase/7/docs/technotes/guides/net/http-auth.html

Альтернатива 2: Другой альтернативой является использование Axis2, который использует HTTPClient за сценой. Он выберет лучший метод аутентификации, подходящий для вашего сценария. axis2 client NTLM authentication

Примечание: Axis2 имеет проблемы с некоторыми версиями NTLM и некоторые люди в recomending, чтобы перейти к CFX CXF SOAP Client with NTLM to SharePoint

Эти альтернативные требуют, чтобы включить новые библиотеки в вашем коде, я надеюсь, что это помогает

+0

Спасибо @Pablo за ваш ответ. Я попробовал вторую альтернативу с кодом ниже - \t \t ServiceClass serviceClass = new ServiceClass(); \t \t PortInterface client = serviceClass.getPort (PortInterface.class); \t \t \t \t BindingProvider bindingProvider = (BindingProvider) клиент; \t \t bindingProvider.getRequestContext(). Put ("use.async.http.conduit", Boolean.TRUE); \t \t Credentials creds = новые NTCredentials (USERNAME, PASSWORD, "", DOMAIN); \t \t bindingProvider.getRequestContext(). Put (Credentials.class.getName(), creds); Но он бросает - PolicyException: ни один из альтернатив политики не может быть удовлетворен ». –

+0

Пробовал другие фрагменты кода из вашей ссылки, но не смог продолжить. У вас есть какая-либо другая реализация для того же самого. Также wsdl использует ниже тег для обеспечения безопасности, я все еще нужно следовать NTLM auth, правильно? -

+0

Какая ошибка вы получаете? вы тестируете CFX? –

Смежные вопросы