Как из Java вызвать SOAP метод с NTLMv2 аторизацией?

Проблема заключается в следующем.
Есть сгенеренный jax-ws клиент-код для доступа к SharePoint. SharePoint поднят на Windows 2008 R2 (с авторизацией NTLMv2). Третий день бьюсь с доступом jax-ws клиента к вышеназванному сервису. Стандартный Authenticator не годится. Однако очень круто получается авторизоваться средствами HttpClient (apache.org.httpcomponents:httpclient:4.1), но найти метод подсунуть его как транспорт для jax-ws не получилось. Пробовал подсунуть от него заголовки jax-ws клиенту (нужен заголовок Authorization: NTLM ) - безуспешно (точнее HttpGet.getAllHeaders() после авторизации мне отдаёт пустые заголовки от запроса, HttpResponse.getAllHeaders не пустой, но токена там нет). Помогите, кто чем может :-) а то, чувствую, следующая ночь снова будет бессонной :-(
  • Вопрос задан
  • 580 просмотров
Решения вопроса 1
zhulikovatyi
@zhulikovatyi Автор вопроса
Ключевой момент в задаче: only jax-ws (клиент юзается внутри отдельной либы, без всяких зависимостей типа сервлетов и web-сервисов), никаких Spring и тому подобных инструментов. У вас получалось реализовать подобную авторизацию для стандартного jax-ws ? (и да, гугление дало понять, что стандартный Authenticator работает для NTLM, но не для NTLMv2)

UPD После долгих экспериментов и поисков всё же удалось реализовать сие чудо через стандартный jax-ws.

Решение отсюда и отсюда

Необходимые пакеты:
jcifs-1.3.17.jar
commons-httpclient-3.1.jar
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
zolt85
@zolt85
Программист
А что не так со стандартным Authenticator? Делал подобную задачу (забор инфы с SharePoint портала) на Spring-WS. Там в сервисе просто выставлял Authenticator

/** */
	@PostConstruct
	public void postCreate() {
		Authenticator authenticator = new CustomAuthenticator("domain\\login", "password".toCharArray());
		Authenticator.setDefault(authenticator);
	}


Код CustomAuthenticator.java:
package com.custom.sharepoint.util;

import java.net.*;

public class CustomAuthenticator extends Authenticator {
	private final String username;
	private final char[] password;

	public CustomAuthenticator(String username, char[] password) {
		this.username = username;
		this.password = password;
	}

	@Override
	public PasswordAuthentication getPasswordAuthentication() {
		return new PasswordAuthentication(username, password);
	}
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы