集册 Java实例教程 定制http client以使用摘要方案apache http client进行抢先身份验证

定制http client以使用摘要方案apache http client进行抢先身份验证

欢马劈雪     最近更新时间:2020-01-02 10:19:05

460
定制的HttpClient可以使用DIGEST方案apache http客户端抢先进行身份验证

/*

 * --------------------------------------------------------------------

 * Licensed to the Apache Software Foundation (ASF) under one

 * or more contributor license agreements.  See the NOTICE file

 * distributed with this work for additional information

 * regarding copyright ownership.  The ASF licenses this file

 * to you under the Apache License, Version 2.0 (the

 * "License"); you may not use this file except in compliance

 * with the License.  You may obtain a copy of the License at

 *

 *   http://www.apache.org/licenses/LICENSE-2.0

 *

 * Unless required by applicable law or agreed to in writing,

 * software distributed under the License is distributed on an

 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

 * KIND, either express or implied.  See the License for the

 * specific language governing permissions and limitations

 * under the License.

 * --------------------------------------------------------------------

 *

 * This software consists of voluntary contributions made by many

 * individuals on behalf of the Apache Software Foundation.  For more

 * information on the Apache Software Foundation, please see

 * <http://www.apache.org/>.

 *

 *//** 来 自 nowjava.com - 时  代  Java**/

package org.apache.http.examples.client;


import org.apache.http.HttpHost;

import org.apache.http.auth.AuthScope;

import org.apache.http.auth.UsernamePasswordCredentials;

import org.apache.http.client.AuthCache;

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;


/**

 * An example of HttpClient can be customized to authenticate

 * preemptively using DIGEST scheme.

 * <p>

 * Generally, preemptive authentication can be considered less

 * secure than a response to an authentication challenge

 * and therefore discouraged.

 * </p>

 */

public class ClientPreemptiveDigestAuthentication {/**来自 时 代 J a v a 公 众 号 - nowjava.com**/


    public static void main(String[] args) throws Exception {

        HttpHost target = new HttpHost("localhost", 80, "http");

        CredentialsProvider credsProvider = new BasicCredentialsProvider();

        credsProvider.setCredentials(new AuthScope(target.getHostName(),

                target.getPort()), new UsernamePasswordCredentials(

                "username", "password"));

        CloseableHttpClient httpclient = HttpClients.custom()

                .setDefaultCredentialsProvider(credsProvider).build();

        try {


            // Create AuthCache instance

            AuthCache authCache = new BasicAuthCache();

            // Generate DIGEST scheme object, initialize it and add it to the local

            // auth cache

            DigestScheme digestAuth = new DigestScheme();

            // Suppose we already know the realm name

            digestAuth.overrideParamter("realm", "some realm");

            // Suppose we already know the expected nonce value

            digestAuth.overrideParamter("nonce", "whatever");

            authCache.put(target, digestAuth);


            // Add AuthCache to the execution context

            HttpClientContext localContext = HttpClientContext.create();

            localContext.setAuthCache(authCache);


            HttpGet httpget = new HttpGet("/");


            System.out.println(
展开阅读全文