Glide如何加载https图片(简明操作)

来源:互联网 发布:用homebrew安装mysql 编辑:程序博客网 时间:2024/06/05 03:08

Glide如何加载https图片(简明操作)

利用以下简明步骤可以快速完成Glide加载https图片
- gradle引用

compile ‘com.squareup.okhttp3:okhttp:3.3.1’
compile ‘com.github.bumptech.glide:glide:3.7.0’

/提供的Module/

compile ‘com.github.bumptech.glide:okhttp3-integration:1.4.0@aar’

可在application中操作

1.设置证书传入

try {    InputStream[] InputStream = new InputStream[1];    InputStream input = getApplication().getAssets().open("CA_.cer");    InputStream[0] = input;} catch (IOException e) {     e.printStackTrace();}

2.初始化

//让Glide能用HTTPS Glide.get(this.getApplication()).register(GlideUrl.class, InputStream.class, new OkHttpUrlLoader.Factory(HttpsUtils.getOkHttpClient(InputStream)));

3.创建HttpsUtils类

import java.io.IOException;import java.io.InputStream;import java.security.KeyManagementException;import java.security.KeyStore;import java.security.KeyStoreException;import java.security.NoSuchAlgorithmException;import java.security.SecureRandom;import java.security.UnrecoverableKeyException;import java.security.cert.CertificateException;import java.security.cert.CertificateFactory;import java.security.cert.X509Certificate;import javax.net.ssl.HostnameVerifier;import javax.net.ssl.KeyManager;import javax.net.ssl.KeyManagerFactory;import javax.net.ssl.SSLContext;import javax.net.ssl.SSLSession;import javax.net.ssl.SSLSocketFactory;import javax.net.ssl.TrustManager;import javax.net.ssl.TrustManagerFactory;import javax.net.ssl.X509TrustManager;import okhttp3.OkHttpClient;/** * 设置允许Https */public class HttpsUtils{    public static SSLSocketFactory getSslSocketFactory(InputStream[] certificates, InputStream bksFile, String password){        try{            TrustManager[] trustManagers = prepareTrustManager(certificates);            KeyManager[] keyManagers = prepareKeyManager(bksFile, password);            SSLContext sslContext = SSLContext.getInstance("TLS");            TrustManager trustManager = null;            if (trustManagers != null){                trustManager = new MyTrustManager(chooseTrustManager(trustManagers));            } else{                trustManager = new UnSafeTrustManager();            }            sslContext.init(keyManagers, new TrustManager[]{trustManager}, new SecureRandom());            return sslContext.getSocketFactory();        } catch (NoSuchAlgorithmException e){            throw new AssertionError(e);        } catch (KeyManagementException e){            throw new AssertionError(e);        } catch (KeyStoreException e){            throw new AssertionError(e);        }    }    private class UnSafeHostnameVerifier implements HostnameVerifier {        @Override        public boolean verify(String hostname, SSLSession session){            return true;        }    }    private static class UnSafeTrustManager implements X509TrustManager {        @Override        public void checkClientTrusted(X509Certificate[] chain, String authType)throws CertificateException {}        @Override        public void checkServerTrusted(X509Certificate[] chain, String authType)throws CertificateException{}        @Override        public X509Certificate[] getAcceptedIssuers(){            return new X509Certificate[]{};        }    }    private static TrustManager[] prepareTrustManager(InputStream... certificates){        if (certificates == null || certificates.length <= 0) return null;        try{            CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");            KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());            keyStore.load(null);            int index = 0;            for (InputStream certificate : certificates){                String certificateAlias = Integer.toString(index++);                keyStore.setCertificateEntry(certificateAlias, certificateFactory.generateCertificate(certificate));                try{                    if (certificate != null)                        certificate.close();                } catch (IOException e){                }            }            TrustManagerFactory trustManagerFactory = null;            trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());            trustManagerFactory.init(keyStore);            TrustManager[] trustManagers = trustManagerFactory.getTrustManagers();            return trustManagers;        } catch (NoSuchAlgorithmException e){            e.printStackTrace();        } catch (CertificateException e){            e.printStackTrace();        } catch (KeyStoreException e){            e.printStackTrace();        } catch (Exception e){            e.printStackTrace();        }        return null;    }    private static KeyManager[] prepareKeyManager(InputStream bksFile, String password){        try{            if (bksFile == null || password == null) return null;            KeyStore clientKeyStore = KeyStore.getInstance("BKS");            clientKeyStore.load(bksFile, password.toCharArray());            KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());            keyManagerFactory.init(clientKeyStore, password.toCharArray());            return keyManagerFactory.getKeyManagers();        } catch (KeyStoreException e){            e.printStackTrace();        } catch (NoSuchAlgorithmException e){            e.printStackTrace();        } catch (UnrecoverableKeyException e){            e.printStackTrace();        } catch (CertificateException e){            e.printStackTrace();        } catch (IOException e){            e.printStackTrace();        } catch (Exception e){            e.printStackTrace();        }        return null;    }    private static X509TrustManager chooseTrustManager(TrustManager[] trustManagers){        for (TrustManager trustManager : trustManagers){            if (trustManager instanceof X509TrustManager){                return (X509TrustManager) trustManager;            }        }        return null;    }    private static class MyTrustManager implements X509TrustManager{        private X509TrustManager defaultTrustManager;        private X509TrustManager localTrustManager;        public MyTrustManager(X509TrustManager localTrustManager) throws NoSuchAlgorithmException, KeyStoreException{            TrustManagerFactory var4 = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());            var4.init((KeyStore) null);            defaultTrustManager = chooseTrustManager(var4.getTrustManagers());            this.localTrustManager = localTrustManager;        }        @Override        public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException{}        @Override        public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException{            try{                defaultTrustManager.checkServerTrusted(chain, authType);            } catch (CertificateException ce){                localTrustManager.checkServerTrusted(chain, authType);            }        }        @Override        public X509Certificate[] getAcceptedIssuers(){            return new X509Certificate[0];        }    }    public static OkHttpClient getOkHttpClient(InputStream... certificates)    {        SSLSocketFactory sslSocketFactory = HttpsUtils.getSslSocketFactory(certificates, null, null);        OkHttpClient.Builder builder = new OkHttpClient().newBuilder();        builder = builder.sslSocketFactory(sslSocketFactory);        builder.hostnameVerifier(new HostnameVerifier() {            @Override            public boolean verify(String hostname, SSLSession session)            {                return true;            }        });        return builder.build();    }}

创建完成,Glide就可以加载Https图片

引用

ImageLoader和Glide加载Https的图片