如何使用泽西发送NTLM认证的帖子请求?

Sag*_*udi 8 java rest ntlm jersey sharepoint-2013

我正在使用Java对Sharepoint 2013进行休息api调用.如何使用泽西休息客户端连接到sharepoint 2013?

注意:目前我正在使用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();
Run Code Online (Sandbox Code Playgroud)

如何将此采用到Jersey框架?

ret*_*eto 5

以下代码执行使用 Jersey 的 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;
}
Run Code Online (Sandbox Code Playgroud)

请注意,这种方法需要:jersey-apache-connector. Maven 依赖:

<dependency>
    <groupId>org.glassfish.jersey.connectors</groupId>
    <artifactId>jersey-apache-connector</artifactId>
    <version>2.22.2</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

  • 我尝试了建议的解决方案,但如果我发布以下形式的帖子:client.target(...).request().post(...) 没有“授权”标头附加到我的请求中。难道我做错了什么? (2认同)