对此有很多答案(one,two,three),但它们都使用过时的方法。对于Java 1.7及更高版本,当需要为Basic,Digest,NTLM和/或Windows Identity提供凭据时,通过http请求资源的最佳方法是什么?
使用Apache库就可以了。
我知道这是一个重复的问题,但现有的答案似乎都是使用过时的电话。
更新:这是针对我们所拥有的库,用户可以将任何URL传递给我们,并说它是任何不同的身份验证系统。我们的用户将此库添加到不同的应用程序中。因此,它可以是任何应用程序中使用的任何服务。它可以是web,也可以是REST。它可以在Apache,WebLogic,WebSphere或其他任何东西下。
答案 0 :(得分:0)
你想要实现什么 - 所有认证方法都没有一个神奇的银弹。最好的选择是使用具有丰富http-client的完善的HTTP客户端框架(例如authentication options)。还有其他几个,但我认为apache HttpCompnents是最可靠的(并且仍然是免费的)。
Apache HTTP commons客户端应该与任何仅客户端身份验证(基本,摘要,NTLM(不是我最喜欢的))一起开箱即用。大多数情况下,您将为其工作的HTTP上下文实现“CredentialProvider”(密码回调类)。对于Windows Identity(我假设您的意思是Kerberos / SPNEGO身份验证),您将需要更多配置(密钥表文件,jaas配置,..)。
通常你应该坚持每个人都支持的一些通用标准,并尝试让其他人使用它(基于TLS / SSL的基本身份验证应该没问题)。
您可能仍会遇到的情况是 - 使用不同的环境(WebSphere,WebLogic,其他应用程序),其他应用程序可能会强制您使用不同版本的HTTP客户端库或版本,并且您的配置不适用于所有方法。因此,在您不打算实现自己的http客户端(简单的基本和摘要式身份验证)之前,您必须强制客户端使用特定版本的特定框架。