Apache HttpComponents HttpClient 5.0 - Kerberos SPNEGO 客户端

Posted

技术标签:

【中文标题】Apache HttpComponents HttpClient 5.0 - Kerberos SPNEGO 客户端【英文标题】:Apache HttpComponents HttpClient 5.0 - Kerberos SPNEGO client 【发布时间】:2020-09-27 04:12:48 【问题描述】:

我正在尝试将我的 HttpClient 4.x 代码移植到 5.x

Lookup<AuthSchemeProvider> authSchemeRegistry = RegistryBuilder.<AuthSchemeProvider>create()
            .register(AuthSchemes.SPNEGO, new SPNegoSchemeFactory(true)).build();

但是在 5.x 中不再有 AuthSchemeProvider,并且 SPNegoSchemeFactory 有一个不同的构造函数:-/

【问题讨论】:

【参考方案1】:

这样有什么问题?

final Registry<AuthSchemeFactory> schemeFactoryRegistry = RegistryBuilder.<AuthSchemeFactory>create()
        .register(StandardAuthScheme.BASIC, BasicSchemeFactory.INSTANCE)
        .register(StandardAuthScheme.DIGEST, DigestSchemeFactory.INSTANCE)
        .register(StandardAuthScheme.NTLM, NTLMSchemeFactory.INSTANCE)
        .register(StandardAuthScheme.SPNEGO, new SPNegoSchemeFactory(
                KerberosConfig.custom()
                        .setStripPort(KerberosConfig.Option.DEFAULT)
                        .setUseCanonicalHostname(KerberosConfig.Option.DEFAULT)
                        .build(),
                SystemDefaultDnsResolver.INSTANCE))
        .register(StandardAuthScheme.KERBEROS, KerberosSchemeFactory.DEFAULT)
        .build();

【讨论】:

代码可以编译,很好,但我仍然收到 401 错误:-/ 你有完整的客户端实现吗? 在您的问题中,您询问了有关将一段代码从 HC 4.x 移植到 HC 5.x 的问题。现在你问的是完全不同的东西。 SPNEGO 在 HC 中被标记为实验性的。作为一个项目,我们并不真正支持它。

以上是关于Apache HttpComponents HttpClient 5.0 - Kerberos SPNEGO 客户端的主要内容,如果未能解决你的问题,请参考以下文章

Apache HttpComponents 工具类 [ HttpUtil ]

org.apache.httpcomponents.httpclient

Gradle 无法解析依赖组:org.apache.httpcomponents,模块:httpmime

org.apache.httpcomponents httpclient 发起HTTP JSON请求

HttpUtils

httpclient