首页 > 解决方案 > Spring Boot REST - 使用 OData 从 Microsoft Dynamics NAV 中提取数据

问题描述

我需要从基于 OData 的 Microsoft Dynamics NAV 中提取数据。我尝试了 NTLM Auth 方法,但我的新方法总是收到“401”或“NEGOTIATE 身份验证错误:提供的名称无效(机制级别:KrbException:无法找到默认领域)”。

我有一个运行 NAV 实例的虚拟机。在我的本地机器上,我的开发环境运行需要提取数据的应用程序。两者不在同一个Windows域中。

到目前为止,这是我的代码(原型设计):

PoolingHttpClientConnectionManager connPool = new PoolingHttpClientConnectionManager();

connPool.setMaxTotal(200);
connPool.setDefaultMaxPerRoute(200);

RequestConfig config = RequestConfig.custom().setTargetPreferredAuthSchemes(Arrays.asList(AuthSchemes.NTLM)).build();

BasicCredentialsProvider b = new BasicCredentialsProvider();
b.setCredentials(org.apache.http.auth.AuthScope.ANY, new NTCredentials("user", "pw", "hostname", "domain"));

HttpClient client = HttpClientBuilder.create().setConnectionManager(connPool).setDefaultCredentialsProvider(b).setDefaultRequestConfig(config).build();

HttpClientContext context = HttpClientContext.create();
context.setCredentialsProvider(b);

String bodyAsString = "";
HttpGet get = new HttpGet("http://VM10-2018:7048/GLT/OData/Company('GLT')/Bestand3");

try {
    HttpResponse response = client.execute(get);

    if (response != null) {
        String s = response.toString();
    }

} catch (ClientProtocolException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

是否可以使用我可以为每个用户生成的用户名和网络服务访问密钥访问数据?用户拥有完全权限。

感谢您的帮助。

标签: springrestodatanavision

解决方案


推荐阅读