interesting httpclient digest auth example
This commit is contained in:
		
							parent
							
								
									31eaa0e16d
								
							
						
					
					
						commit
						14cd93227b
					
				| @ -0,0 +1,86 @@ | |||||||
|  | package org.baeldung.httpclient; | ||||||
|  | 
 | ||||||
|  | import java.io.IOException; | ||||||
|  | 
 | ||||||
|  | import org.apache.http.Header; | ||||||
|  | import org.apache.http.HttpHost; | ||||||
|  | import org.apache.http.HttpResponse; | ||||||
|  | import org.apache.http.auth.AuthScope; | ||||||
|  | import org.apache.http.auth.AuthenticationException; | ||||||
|  | import org.apache.http.auth.MalformedChallengeException; | ||||||
|  | import org.apache.http.auth.UsernamePasswordCredentials; | ||||||
|  | import org.apache.http.client.AuthCache; | ||||||
|  | import org.apache.http.client.ClientProtocolException; | ||||||
|  | import org.apache.http.client.CredentialsProvider; | ||||||
|  | import org.apache.http.client.methods.CloseableHttpResponse; | ||||||
|  | import org.apache.http.client.methods.HttpGet; | ||||||
|  | import org.apache.http.client.protocol.HttpClientContext; | ||||||
|  | import org.apache.http.impl.auth.DigestScheme; | ||||||
|  | import org.apache.http.impl.client.BasicAuthCache; | ||||||
|  | import org.apache.http.impl.client.BasicCredentialsProvider; | ||||||
|  | import org.apache.http.impl.client.CloseableHttpClient; | ||||||
|  | import org.apache.http.impl.client.HttpClients; | ||||||
|  | import org.apache.http.util.EntityUtils; | ||||||
|  | import org.junit.Test; | ||||||
|  | 
 | ||||||
|  | public class SandboxTest { | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     public final void whenInterestingDigestAuthScenario_then200OK() throws AuthenticationException, ClientProtocolException, IOException, MalformedChallengeException { | ||||||
|  |         final HttpHost targetHost = new HttpHost("httpbin.org", 80, "http"); | ||||||
|  | 
 | ||||||
|  |         // set up the credentials to run agains the server | ||||||
|  |         final CredentialsProvider credsProvider = new BasicCredentialsProvider(); | ||||||
|  |         credsProvider.setCredentials(new AuthScope(targetHost.getHostName(), targetHost.getPort()), new UsernamePasswordCredentials("user", "passwd")); | ||||||
|  | 
 | ||||||
|  |         // We need a first run to get a 401 to seed the digest auth | ||||||
|  | 
 | ||||||
|  |         // Make a client using those creds | ||||||
|  |         final CloseableHttpClient client = HttpClients.custom().setDefaultCredentialsProvider(credsProvider).build(); | ||||||
|  | 
 | ||||||
|  |         // And make a call to the URL we are after | ||||||
|  |         final HttpGet httpget = new HttpGet("http://httpbin.org/digest-auth/auth/user/passwd"); | ||||||
|  | 
 | ||||||
|  |         // Create a context to use | ||||||
|  |         final HttpClientContext context = HttpClientContext.create(); | ||||||
|  | 
 | ||||||
|  |         // Get a response from the sever (expect a 401!) | ||||||
|  |         final HttpResponse authResponse = client.execute(targetHost, httpget, context); | ||||||
|  | 
 | ||||||
|  |         // Pull out the auth header that came back from the server | ||||||
|  |         final Header challenge = authResponse.getHeaders("WWW-Authenticate")[0]; | ||||||
|  | 
 | ||||||
|  |         // Lets use a digest scheme to solve it | ||||||
|  |         final DigestScheme digest = new DigestScheme(); | ||||||
|  |         digest.processChallenge(challenge); | ||||||
|  | 
 | ||||||
|  |         // Make a header with the solution based upon user/password and what the digest got out of the initial 401 reponse | ||||||
|  |         final Header solution = digest.authenticate(new UsernamePasswordCredentials("user", "passwd"), httpget, context); | ||||||
|  | 
 | ||||||
|  |         // Need an auth cache to use the new digest we made | ||||||
|  |         final AuthCache authCache = new BasicAuthCache(); | ||||||
|  |         authCache.put(targetHost, digest); | ||||||
|  |          | ||||||
|  |         // Add the authCache and thus solved digest to the context | ||||||
|  |         context.setAuthCache(authCache); | ||||||
|  | 
 | ||||||
|  |         // Pimp up our http get with the solved header made by the digest | ||||||
|  |         httpget.addHeader(solution); | ||||||
|  | 
 | ||||||
|  |         // use it! | ||||||
|  |         System.out.println("Executing request " + httpget.getRequestLine() + " to target " + targetHost); | ||||||
|  | 
 | ||||||
|  |         for (int i = 0; i < 3; i++) { | ||||||
|  |             final CloseableHttpResponse responseGood = client.execute(targetHost, httpget, context); | ||||||
|  | 
 | ||||||
|  |             try { | ||||||
|  |                 System.out.println("----------------------------------------"); | ||||||
|  |                 System.out.println(responseGood.getStatusLine()); | ||||||
|  |                 System.out.println(EntityUtils.toString(responseGood.getEntity())); | ||||||
|  |             } finally { | ||||||
|  |                 responseGood.close(); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user