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 {@Overridepublic boolean verify(String hostname, SSLSession session){return true;}}private static class UnSafeTrustManager implements X509TrustManager {@Overridepublic void checkClientTrusted(X509Certificate[] chain, String authType)throws CertificateException {}@Overridepublic void checkServerTrusted(X509Certificate[] chain, String authType)throws CertificateException{}@Overridepublic 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;}@Overridepublic void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException{}@Overridepublic void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException{try{defaultTrustManager.checkServerTrusted(chain, authType);} catch (CertificateException ce){localTrustManager.checkServerTrusted(chain, authType);}}@Overridepublic 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() {@Overridepublic boolean verify(String hostname, SSLSession session){return true;}});return builder.build();}
}

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

引用

ImageLoader和Glide加载Https的图片

Glide如何加载https图片(简明操作)相关推荐

  1. 成功解决Glide3.7.0加载https图片,显示占位图问题。

    平时我们使用Glide加载http网址的图片的时候,图片可以正常加载出来,但是如果服务器端加上了安全认证,当加载自签名的https图片的时候就会报如下错误(证书路径验证异常). Trust ancho ...

  2. 解决ImageLoader加载HTTPS图片证书校验异常问题

    解决ImageLoader加载HTTPS图片证书校验异常问题 参考文章: (1)解决ImageLoader加载HTTPS图片证书校验异常问题 (2)https://www.cnblogs.com/cs ...

  3. Glide加载https图片

    因为在WWDC 2016开发者大会上,苹果宣布了一个最后期限:到2017年1月1日 App Store中的所有应用都必须启用App Transport Security安全功能,所以受之牵连,因此图片 ...

  4. http的网页下加载https图片失败

    一.在网页中https的图片加载失败 默认浏览器的加载是安全的,不支持https 二.解决方案 在页面head中加上 <meta name="referrer" conten ...

  5. Android中Glide加载Https图片失败的解决方案(记录)

    1.在Application中添加如下方法: public static void handleSSLHandshake() {try {TrustManager[] trustAllCerts = ...

  6. Glide加载部分图片不显示问题

    Glide版本为4及其以上 图片不显示原因 没有添加INTERNET网络权限 老版本Glide无法加载https图片(需要使用okhttp忽略证书) 图片Url无法连接 图片返回数据不全且格式不正确 ...

  7. 使用Glide加载https网址图片

      最近有网友问我怎么加载https图片,说是从网上找了很多办法都没成功,然后我就问他用的是什么图片加载工具,回答是glide,然后我自己也去网上找了一下,千篇一律的都说是结合okhttp来使用,修改 ...

  8. 剖析Picasso加载压缩本地图片流程(解决Android 5.0部分机型无法加载本地图片的问题)

    之前项目中使用Picasso遇到了一个问题:在Android 5.0以上版本的部分手机上使用Picasso加载本地图片会失败.为了解决这个问题,研究了一下Picasso加载和压缩本地图片的流程,才有了 ...

  9. android picasso 显示本地图片,剖析Picasso加载压缩本地图片流程(解决Android 5.0部分机型无法加载本地图片的问题)...

    之前项目中使用Picasso遇到了一个问题:在Android 5.0以上版本的部分手机上使用Picasso加载本地图片会失败.为了解决这个问题,研究了一下Picasso加载和压缩本地图片的流程,才有了 ...

最新文章

  1. Service Fabric独立集群搭建
  2. jQueryEasyUI 的入门
  3. golang 命名规范和开发规范
  4. 【转载】浅谈EDA验证工具
  5. 基于Android平台的流媒体播放器的设计
  6. ValueError: do_handshake_on_connect should not be specified for non-blocking sockets
  7. Detectron2 win10踩坑记录
  8. 关于CSS中定位的个人理解
  9. TreeSet简单介绍与使用方法
  10. 自动驾驶_感知_目标检测(激光雷达)
  11. 赚了李嘉诚2.7亿元
  12. 四阶段法——城市交通需求预测
  13. ABAQUS地应力平衡方法详解
  14. 请问下面这段代码哪里有错? private static final String s=
  15. linux执行ps命令卡住了,linux ps命令的状态说明
  16. gcc参数-Wl,–gc-sections,不链接未用函数,减小可执行文件大小
  17. Unix/BSD/Linux的口令机制初探(转)
  18. 海南大学 838信号与系统专业课的感悟
  19. 部署阿里云盘的目录文件列表程序教程
  20. 安科瑞精密配电列头柜产品XXX数据中心案例分享-安科瑞华楠

热门文章

  1. jquery 数组indexof_jquery 数组判断值是否存在的方法
  2. APM飞控二次开发(入门) 参考网站
  3. UML图包含元素分析
  4. 如何开通阿里巴巴国际站
  5. Ubuntu 编译安装Nginx
  6. 关于BufferedReader.readLine()
  7. Triton Inference Server教程2
  8. Iphone 键盘消失
  9. APP海外推广“神器”Facebook自动应用广告的创建及优化
  10. 怎样将 excel 里的日期保留到年月