java - apache httpclient 有没有办法根据 URI 设置凭据

标签 java resteasy apache-httpclient-4.x

目前,我有一些使用 Resteasy 调用的 uri,看起来像这样:

http://host.com/api/project1/getsomestuff

http://host.com/api/project2/getsomestuff

两者都使用摘要身份验证,但需要不同的用户名和密码进行身份验证。目前在代码中我必须通过为每个项目创建不同的客户端实例来处理这个问题,如下所示:

DefaultHttpClient project1Client = new DefaultHttpClient();
Credentials project1Credentials = new UsernamePasswordCredentials("user1", "password1");
project1Client.getCredentialsProvider().setCredentials(AuthScope.ANY, project1Credentials);
ClientExecutor executor1 = new ApacheHttpClient4Executor(project1Client);
MyService project1Proxy = ProxyFactory.create(MyService.class, executor1);
project1Proxy.getSomeStuff("project1");

DefaultHttpClient project2Client = new DefaultHttpClient();
Credentials project2Credentials = new UsernamePasswordCredentials("user2", "password2");
project2Client.getCredentialsProvider().setCredentials(AuthScope.ANY, project1Credentials);
ClientExecutor executor2 = new ApacheHttpClient4Executor(project1Client);
MyService project2Proxy = ProxyFactory.create(MyService.class, executor2);
project2Proxy.getSomeStuff("project2");

我已经查看了 AuthScope 和 CredentialsProvider,但我看不出有什么可能做到这一点。有谁知道使用同一客户端使用两组凭据的任何方法,或者我是否坚持使用多个客户端?

另外,请注意,我不控制此其余调用的服务器端,并且两个调用使用相同的领域,因此我无法为每个领域设置不同的凭据。

最佳答案

如果这些应用程序具有不同的安全上下文,它们也可能具有不同的身份验证领域(或者至少预期如此)。人们可以显式设置 AuthScope 对象上的领域属性,以显式地将其与具有给定领域名称的特定身份验证上下文相匹配。

关于java - apache httpclient 有没有办法根据 URI 设置凭据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11891292/

相关文章:

java - 这是使用 AIMDBackoffManager 实例化 HttpClient 的正确方法吗?

java - 插入文档时达到最大池大小时出现 ConnectionPoolTimeoutException

java - 无法访问未找到 java.awt.image.RenderedImage 的 RenderedImage 类文件

java - 建立套接字连接时出错

jsch1.4.8的Java Telnet Applet无法输入

rest - Atom Links 与 RESTEasy 的实用程序

java - 如何在 JAX-RS 客户端获取直接异常堆栈跟踪

java - 如何在没有 Maven 的情况下在 fxml JavaFX 上使用 FontAwesome

java - 无法使 Resteasy 与 Tomcat 8 和 Java 8 一起工作

HttpClient 没有重复使用我的连接,不断创建新的连接