如何使用Jersey发送NTLM认证的POST请求?

9

我正在使用Java向Sharepoint 2013发出rest api调用。如何使用jersey rest客户端连接到Sharepoint 2013?

注意:目前我正在使用Apache Http Components和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();

如何将其应用到Jersey框架中?

请提供您尝试创建解决方案的任何代码,并提供证据表明您已经进行了一些研究或了解了您要实现的基本原理。人们将更能够帮助您,如果他们知道更多关于您尝试做什么,您尝试过什么,您读过什么。您的库版本和应用程序结构/框架的版本也会有所帮助。 - Daniel Tung
@DanielTung 我已经添加了我的工作。 - Sagar Pudi
1个回答

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;
}

请注意,这种方法需要使用jersey-apache-connector。 Maven依赖关系:
<dependency>
    <groupId>org.glassfish.jersey.connectors</groupId>
    <artifactId>jersey-apache-connector</artifactId>
    <version>2.22.2</version>
</dependency>

2
我尝试了建议的解决方案,但如果我使用以下形式的post:client.target(...).request().post(...),则没有“Authorization”头附加到我的请求中。我做错了什么吗? - finrod
刚刚发现在类路径上放置不同库的版本时需要小心。目前,如果我依赖于Tika(一个看似无关的库),它又依赖于httpclient库,那么NTLM就会出问题。在我的情况下,我怀疑“正确”的版本被Gradle的依赖解析所替换了。 - aioobe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接