hc-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Oleg Kalnichevski (JIRA)" <j...@apache.org>
Subject [jira] [Resolved] (HTTPCLIENT-1215) http://host and http://host:80 not considered the same for credential matching
Date Wed, 10 Oct 2012 19:21:03 GMT

     [ https://issues.apache.org/jira/browse/HTTPCLIENT-1215?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Oleg Kalnichevski resolved HTTPCLIENT-1215.
-------------------------------------------

    Resolution: Fixed

I fixed the problem in both trunk and 4.2.x. The fix in trunk relies on SchemeRegistry to
resolve default ports. The fix in 4.2.x uses simple translation (443 for https, 80 for all
others).

Please re-test your application against the latest SVN snapshot.

Oleg
                
> http://host and http://host:80 not considered the same for credential matching
> ------------------------------------------------------------------------------
>
>                 Key: HTTPCLIENT-1215
>                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-1215
>             Project: HttpComponents HttpClient
>          Issue Type: Bug
>          Components: HttpClient
>    Affects Versions: 4.2.1
>            Reporter: Radai Rosenblatt
>             Fix For: 4.2.2
>
>
> the following code (taken from http://hc.apache.org/httpcomponents-client-ga/tutorial/html/authentication.html
section 4.8 and modified to use a URI) will not add authentication headers to the outgoing
http request because the URI string does not explicitely specify the port:
>         URI uri = new URI("http://somedomain.com/stuff");
>         HttpHost targetHost = new HttpHost(uri.getHost(), uri.getPort(), uri.getScheme());
>         DefaultHttpClient httpclient = new DefaultHttpClient();
>         httpclient.getCredentialsProvider().setCredentials(
>                 new AuthScope(targetHost.getHostName(), targetHost.getPort()),
>                 new UsernamePasswordCredentials("username", "password"));
>         // Create AuthCache instance
>         AuthCache authCache = new BasicAuthCache();
>         // Generate BASIC scheme object and add it to the local auth cache
>         BasicScheme basicAuth = new BasicScheme();
>         authCache.put(targetHost, basicAuth);
>         // Add AuthCache to the execution context
>         BasicHttpContext localcontext = new BasicHttpContext();
>         localcontext.setAttribute(ClientContext.AUTH_CACHE, authCache);
>         HttpGet httpget = new HttpGet(uri);
>         for (int i = 0; i < 3; i++) {
>             HttpResponse response = httpclient.execute(targetHost, httpget, localcontext);
>             System.err.println(response.getStatusLine());
>             HttpEntity entity = response.getEntity();
>             EntityUtils.consume(entity);
>         }
> the root cause for this is in RequestAuthCache.java line 90:
>     HttpHost target = (HttpHost) context.getAttribute(ExecutionContext.HTTP_TARGET_HOST);
>         if (target.getPort() < 0) {
>             SchemeRegistry schemeRegistry = (SchemeRegistry) context.getAttribute(
>                     ClientContext.SCHEME_REGISTRY);
>             Scheme scheme = schemeRegistry.getScheme(target);
>             target = new HttpHost(target.getHostName(),
>                     scheme.resolvePort(target.getPort()), target.getSchemeName());
>         }
>         AuthState targetState = (AuthState) context.getAttribute(ClientContext.TARGET_AUTH_STATE);
>         if (target != null && targetState != null && targetState.getState()
== AuthProtocolState.UNCHALLENGED) {
>             AuthScheme authScheme = authCache.get(target);
>             if (authScheme != null) {
>                 doPreemptiveAuth(target, authScheme, targetState, credsProvider);
>             }
>         }
> the target has no port (meaning <0 ), so its recreated with the default http scheme
port of 80.
> meanwhile authCache uses the original target host as key, and so authScheme will be null.
> explicitely declaring port 80 in the URI string works around this, but i think this should
work by default.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org


Mime
View raw message