Я попытался подключиться к нашим SharePoint и POST некоторым данным в список.Опубликовать в SharePoint 2013 от Java
Пользователь может взаимодействовать с веб-приложением и отправлять некоторую информацию. Эти данные будут отправляться на Java-Web-интерфейс, работающий на tomcat. Java-код должен подключиться к нашему SharePoint и опубликовать данные в списке. Сегодня я прочитал много учебников и ressources в Интернете ... Большинство из них - устаревшие руды обсуждают легкомысленные ситуации! ТАК! Мое мнение прошептало: «Продолжайте и переходите к stackoverflow». И вот я, задавая этот вопрос:
Ситуация описана выше. Я вызываю веб-интерфейс vie JS (angularJS) и передаю адрес электронной почты, который пользователь вводит в интерфейс. Вот он идет в:
@Path("webservice")
public class SetEmail {
@POST
@Path("/SetEmail")
@Consumes(MediaType.APPLICATION_JSON + ";charset=UTF-8")
@Produces("text/plain")
public String addItem(String incoming) throws ClientProtocolException, IOException, AuthenticationException{
String result = "error";
JSONObject jsonObj = new JSONObject(incoming);
String listName = "Leads";
String username = "...";
char[] password= new char[]{'...', '...', ...};
String website = "...";
Теперь, после того, как все, что я прочитал, я должен получить DigestValue из SharePoint, потому что я хочу сделать POST-запрос:
//Get the Digestvalue.
CredentialsProvider provider = new BasicCredentialsProvider();
provider.setCredentials(AuthScope.ANY, new NTCredentials(username, password.toString(), "http://...", "https://..."));
HttpClient client = HttpClientBuilder.create().setDefaultCredentialsProvider(provider).build();
HttpPost httpPost = new HttpPost(website + "_api/contextinfo");
httpPost.addHeader("Accept", "application/json;odata=verbose");
httpPost.addHeader("content-type", "application/json;odata=verbose");
httpPost.addHeader("X-ClientService-ClientTag", "SDK-JAVA");
HttpResponse response = client.execute(httpPost);
byte[] content = EntityUtils.toByteArray(response.getEntity());
String jsonString = new String(content, "UTF-8");
System.out.println(response);
JSONObject json = new JSONObject(jsonString);
String FormDigestValue = json.getJSONObject("d").getJSONObject("GetContextWebInformation").getString("FormDigestValue");
После получения Digest, Я в состоянии выполнить фактический запрос:
//POST the data.
CloseableHttpClient client2 = HttpClients.createDefault();
HttpPost httpPost2 = new HttpPost(website + "_api/web/lists/GetByTitle(" + listName + ")");
httpPost2.setEntity(new StringEntity("test post"));
NTCredentials creds = new NTCredentials(username, password.toString(), "http://...", "https://...");
httpPost2.addHeader(new BasicScheme().authenticate(creds, httpPost2, null));
httpPost2.addHeader("X-RequestDigest", FormDigestValue);
httpPost2.addHeader("Accept", "application/json;odata=verbose");
httpPost2.addHeader("Content-Type", "application/json;odata=verbose");
CloseableHttpResponse response2 = client2.execute(httpPost2);
System.out.println(response2);
client2.close();
}
}
Я знаю, что это не самый красивый код и да, я не являюсь экспертом Java. Мои проблемы являются:
- Я не знаю, погода все эти кодовые фрагменты до даты или погоду я использую устаревшие те. Возможно, кто-то может просветить меня.
- Я использую HttpClient из Apache. Для меня это выглядело как самая полезная библиотека . Это правильно?
Каждый раз, когда я выполняю действие на интерфейсе, и мой код запускает запущен, я получаю сообщение об ошибке «Неавторизованная ошибка HTTP 401». Я попробовал различные виды кода, но никто не работал хорошо.
HttpResponseProxy{HTTP/1.1 401 Unauthorized [Server: Microsoft-IIS/8.0, SPR..
Возможно, кто имеет терпение, чтобы сказать мне, как это сделать. Спасибо.
Должно быть, это решение может быть немного «отключено». ;) Но в Интернете можно найти много учебников по этой теме. Я передумаю и, возможно, попробую другое решение. – Nico
Эй, Нико, я нашел эту ветку, может быть, это поможет вам встать на правильный путь: http://sharepoint.stackexchange.com/questions/79803/how-to-authenticate-user-in-sharepoint-online-using-javascript – Nils
Спасибо. Он обращается к другой проблеме, но может быть солютеном. :) – Nico