栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

HttpClientBuilder基本身份验证

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

HttpClientBuilder基本身份验证

从此处的 抢先身份验证 文档中:

http://hc.apache.org/httpcomponents-client-
ga/tutorial/html/authentication.html

默认情况下,httpclient不会抢先提供凭据,它将首先创建一个没有身份验证参数的HTTP请求。这是设计使然,出于安全预防措施以及作为规范的一部分。但是,如果您不重试连接,或者连接到的任何地方希望您在第一个连接上发送身份验证详细信息,就会引起问题。由于您需要拨打多个电话,因此还会导致请求的额外延迟,并使401s出现在日志中。

解决方法是使用身份验证缓存来假装您已经连接到服务器一次。这意味着您只会进行一次HTTP调用,而不会在日志中看到401:

CloseableHttpClient httpclient = HttpClientBuilder.create().build();HttpHost targetHost = new HttpHost("localhost", 80, "http");CredentialsProvider credsProvider = new BasicCredentialsProvider();credsProvider.setCredentials(        new AuthScope(targetHost.getHostName(), targetHost.getPort()),        new UsernamePasswordCredentials("username", "password"));// Create AuthCache instanceAuthCache authCache = new BasicAuthCache();// Generate BASIC scheme object and add it to the local auth cacheBasicScheme basicAuth = new BasicScheme();authCache.put(targetHost, basicAuth);// Add AuthCache to the execution contextHttpClientContext context = HttpClientContext.create();context.setCredentialsProvider(credsProvider);context.setAuthCache(authCache);HttpGet httpget = new HttpGet("/");for (int i = 0; i < 3; i++) {    CloseableHttpResponse response = httpclient.execute( targetHost, httpget, context);    try {        HttpEntity entity = response.getEntity();    } finally {        response.close();    }}

请注意:您需要信任要连接的主机,如果使用的是HTTP,则用户名和密码将以明文形式发送(好吧,是base64,但这不算在内)。

你也应该使用一个更具体的Authscope而不是依靠

AuthScope .ANY_HOST
AuthScope.ANY_PORT
在你的榜样等。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/569313.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号