2015-05-06 3 views
7

Я делаю отдых api вызывает Sharepoint 2013, используя Java. Как я могу подключиться к sharepoint 2013 с помощью клиента jersey rest?Как отправить заявку на отправку NTLM с использованием трикотажа?

Примечание: В настоящее время я использую Apache HTTP компоненты и NTCredentials класс

Credentials credentials=new NTCredentials(username, password, workstation, domain); 
AuthScope authScope=new AuthScope(AuthScope.ANY); 
CredentialsProvider credsProvider = new BasicCredentialsProvider(); 
credsProvider.setCredentials(authScope,credentials); 
CloseableHttpClient httpclient = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build(); 

Как принять это рамки Джерси?

+0

Просьба любой код, в котором вы пытались создать решение, предоставить доказательство того, что вы сделали некоторые исследовались или понять основные принципы того, что вы пытаетесь достичь. Люди будут больше способны помочь узнать немного больше о том, что вы пытаетесь сделать, о том, что вы пробовали, о том, что вы прочитали. Также помогут версии ваших библиотек и структуры/структуры приложения. –

+0

@ DanielTung Я добавил свою работу –

ответ

2

Следующий код выполняет NTLM аутентификацию HTTP GET запроса, который с помощью Джерси:

public Response executeRestGet(String user, String pass) { 
    Client client = ClientBuilder.newClient(prepareClientConfig(user, pass)); 
    WebTarget target = client.target("http://localhost/").path("site/_api/xxxxx"); 
    return target.request(HTTP_ACCEPT_JSON).get(); 
} 

private ClientConfig prepareClientConfig(String user, String pass) { 
    ClientConfig clientConfig = new ClientConfig(); 

    CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); 
    //make sure to supply all 4 arguments to the NTCredentials constructor 
    credentialsProvider.setCredentials(AuthScope.ANY, new NTCredentials(user, pass, null, null)); 

    clientConfig.property(ApacheClientProperties.CREDENTIALS_PROVIDER, credentialsProvider); 
    clientConfig.connectorProvider(new ApacheConnectorProvider()); 
    return clientConfig; 
} 

Пожалуйста, обратите внимание, что этот подход требует: jersey-apache-connector. Maven зависимости:

<dependency> 
    <groupId>org.glassfish.jersey.connectors</groupId> 
    <artifactId>jersey-apache-connector</artifactId> 
    <version>2.22.2</version> 
</dependency> 
+2

Я попробовал предложенное решение, но если я сделаю сообщение формы: client.target (...). Request(). Post (...) нет заголовка «Авторизация» прилагается к моей просьбе. Я делаю что-то неправильно? – finrod

+0

Только что обнаружил, что нужно быть осторожным, какие версии разных библиотек находятся в пути к классам. На данный момент NTLM ломается, если я зависим от Tika (похоже, не связанной с ней библиотеки), которая зависит от библиотеки httpclient. В моем случае я подозреваю, что «правильная» версия поменялась с помощью зависимости зависимости градиентов. – aioobe

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