美文网首页Android开发
基于Glide4.x 支持自签名的https图片的加载

基于Glide4.x 支持自签名的https图片的加载

作者: Zc0716 | 来源:发表于2018-03-16 17:24 被阅读102次

1、build.gradle添加依赖并执行syncnow

compile "com.github.bumptech.glide:okhttp3-integration:4.0.0-RC1"

2、文件拷贝并删除依赖

1、拷贝依赖库下OkHttpStreamFetcher.java和OkHttpUrlLoader.java俩个文件到项目对应文件夹中
2、删除build.gradle中com.github.bumptech.glide:okhttp3-integration:4.0.0-RC1的依赖
该依赖只为获取上述俩个java类文件

3、定义支持自定义签名证书工具类(可直接拷贝至项目中)

public class HttpsUtil {

    public static SSLSocketFactory getSslSocketFactory(){
        try{
            SSLContext sslContext = SSLContext.getInstance("TLS");
            sslContext.init(null, new TrustManager[]{new UnSafeTrustManager()}, new SecureRandom());
            return sslContext.getSocketFactory();

        } catch (NoSuchAlgorithmException e){
            throw new AssertionError(e);
        } catch (KeyManagementException e){
            throw new AssertionError(e);
        }
    }

    public static 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[]{};
        }
    }
}

4、自定义MyGlideModule实现GlideModule的接口下的registerComponents的方法

@Override
  public void registerComponents(@NonNull Context context, @NonNull Glide glide,
      @NonNull Registry registry) {
    OkHttpClient okhttpClient = new OkHttpClient.Builder()
            .retryOnConnectionFailure(true) // 设置出现错误进行重新连接。
            .connectTimeout(15, TimeUnit.SECONDS)
            .readTimeout(60 * 1000, TimeUnit.MILLISECONDS)
            .sslSocketFactory(HttpsUtil.getSslSocketFactory())
            .hostnameVerifier(new HttpsUtil.UnSafeHostnameVerifier())
            .build();
    registry.replace(GlideUrl.class, InputStream.class,
            new OkHttpUrlLoader.Factory(okhttpClient));
  }

5、mainfest中申明自定义的MyGlideModule

<application>
        <!--图片缓存配置-->
        <meta-data android:name="packagename.MyGlideModule"
            android:value="GlideModule"/>

    </application>

相关文章

网友评论

    本文标题:基于Glide4.x 支持自签名的https图片的加载

    本文链接:https://www.haomeiwen.com/subject/bodrqftx.html