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

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>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容