我正在“强迫”httpclient使用:
进行ntlm身份验证 PoolingHttpClientConnectionManager connPool connPool = new PoolingHttpClientConnectionManager();
Lookup<AuthSchemeProvider> authProviders = RegistryBuilder.<AuthSchemeProvider>create()
.register(AuthSchemes.NTLM, new NTLMSchemeFactory())
.build();
CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(connPool).setDefaultAuthSchemeRegistry(authProviders).build();
但是,在对服务器进行身份验证时,我收到一条恼人的日志消息“身份验证方案协商不受支持”。
我怎样才能摆脱这条消息?
(这将在linux机器上运行,因此HttpClient 4.4 JNA支持本机身份验证无济于事。)
答案 0 :(得分:4)
我认为这一切都很简单。实际上,客户端只愿意NTLM
,而服务器只愿意Negotiate
,因此无法就通用的身份验证方案达成一致。
这是如何调整身份验证方案首选项以强制HttpClient通过SPNEGO / Kerberos选择NTLM
RequestConfig config = RequestConfig.custom()
.setTargetPreferredAuthSchemes(Arrays.asList(AuthSchemes.NTLM, AuthSchemes.KERBEROS, AuthSchemes.SPNEGO))
.build();
CloseableHttpClient client = HttpClients.custom()
.setDefaultRequestConfig(config)
.build();