java - 使用 httpclient 4.x 验证单个请求

标签 java authentication apache-httpclient-4.x

我有一个由多个线程共享的 HttpClient 实例。我想用它来发出一个经过身份验证的请求。因为只应验证单个请求,所以我不想修改 HttpClient 实例,如 documentation 中所述.这是我已经解决的问题,但没有用。据我所知,它看起来根本没有使用 CredentialsProvider。有什么建议吗?

HttpContext context = null;
if(feedSpec.isAuthenticated()) {
  context = new BasicHttpContext();
  CredentialsProvider credsProvider = new BasicCredentialsProvider();
  credsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(feedSpec.getHttpUsername(), feedSpec.getHttpPassword()));
  context.setAttribute(ClientContext.CREDS_PROVIDER, credsProvider);
  context.setAttribute(ClientPNames.HANDLE_AUTHENTICATION, true);
}
HttpGet httpGet = new HttpGet(feedSpec.getUri());
HttpResponse httpResponse = httpClient.execute(httpGet, context);

最佳答案

原来我连接的服务器只提供 NTLM 身份验证。我使用指南 here 实现了 NTLM 身份验证.我修改了问题中列出的代码,使其看起来像这样并且有效:

HttpContext context = null;
if(feedSpec.isAuthenticated()) {
    context = new BasicHttpContext();
    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials(AuthScope.ANY, new NTCredentials(feedSpec.getHttpUsername(), feedSpec.getHttpPassword(), "", ""));
    context.setAttribute(ClientContext.CREDS_PROVIDER, credsProvider);
}
HttpGet httpGet = new HttpGet(feedSpec.getUri());
HttpResponse httpResponse = httpClient.execute(httpGet, context);

关于java - 使用 httpclient 4.x 验证单个请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2516345/

相关文章:

java - java中具有不同名称的方法与具有不同枚举参数的单个方法

java - 我可以使用 JPA 将对象类型映射到表吗?

Laravel 5 如何在访客/经过身份验证的用户上显示 Blade 内容?

java - 错误检查对象为空

java - Apache HttpClient、User-Agent 和企业代理

Java,通过保存旧输入并在新行中添加新输入来写入文件

java - 如何在Spring Data R2DBC中运行@Sql之类的查询进行测试

Java 玩吧! 2 - 身份验证没有意义

security - 使用 Windows 身份验证和用户名/密码安全登录 Azure 上的网站

java - 如何防止 apache http 客户端遵循重定向