Glide如何加载https图片(简明操作)
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图片(简明操作)相关推荐
- 成功解决Glide3.7.0加载https图片,显示占位图问题。
平时我们使用Glide加载http网址的图片的时候,图片可以正常加载出来,但是如果服务器端加上了安全认证,当加载自签名的https图片的时候就会报如下错误(证书路径验证异常). Trust ancho ...
- 解决ImageLoader加载HTTPS图片证书校验异常问题
解决ImageLoader加载HTTPS图片证书校验异常问题 参考文章: (1)解决ImageLoader加载HTTPS图片证书校验异常问题 (2)https://www.cnblogs.com/cs ...
- Glide加载https图片
因为在WWDC 2016开发者大会上,苹果宣布了一个最后期限:到2017年1月1日 App Store中的所有应用都必须启用App Transport Security安全功能,所以受之牵连,因此图片 ...
- http的网页下加载https图片失败
一.在网页中https的图片加载失败 默认浏览器的加载是安全的,不支持https 二.解决方案 在页面head中加上 <meta name="referrer" conten ...
- Android中Glide加载Https图片失败的解决方案(记录)
1.在Application中添加如下方法: public static void handleSSLHandshake() {try {TrustManager[] trustAllCerts = ...
- Glide加载部分图片不显示问题
Glide版本为4及其以上 图片不显示原因 没有添加INTERNET网络权限 老版本Glide无法加载https图片(需要使用okhttp忽略证书) 图片Url无法连接 图片返回数据不全且格式不正确 ...
- 使用Glide加载https网址图片
最近有网友问我怎么加载https图片,说是从网上找了很多办法都没成功,然后我就问他用的是什么图片加载工具,回答是glide,然后我自己也去网上找了一下,千篇一律的都说是结合okhttp来使用,修改 ...
- 剖析Picasso加载压缩本地图片流程(解决Android 5.0部分机型无法加载本地图片的问题)
之前项目中使用Picasso遇到了一个问题:在Android 5.0以上版本的部分手机上使用Picasso加载本地图片会失败.为了解决这个问题,研究了一下Picasso加载和压缩本地图片的流程,才有了 ...
- android picasso 显示本地图片,剖析Picasso加载压缩本地图片流程(解决Android 5.0部分机型无法加载本地图片的问题)...
之前项目中使用Picasso遇到了一个问题:在Android 5.0以上版本的部分手机上使用Picasso加载本地图片会失败.为了解决这个问题,研究了一下Picasso加载和压缩本地图片的流程,才有了 ...
最新文章
- Service Fabric独立集群搭建
- jQueryEasyUI 的入门
- golang 命名规范和开发规范
- 【转载】浅谈EDA验证工具
- 基于Android平台的流媒体播放器的设计
- ValueError: do_handshake_on_connect should not be specified for non-blocking sockets
- Detectron2 win10踩坑记录
- 关于CSS中定位的个人理解
- TreeSet简单介绍与使用方法
- 自动驾驶_感知_目标检测(激光雷达)
- 赚了李嘉诚2.7亿元
- 四阶段法——城市交通需求预测
- ABAQUS地应力平衡方法详解
- 请问下面这段代码哪里有错? private static final String s=
- linux执行ps命令卡住了,linux ps命令的状态说明
- gcc参数-Wl,–gc-sections,不链接未用函数,减小可执行文件大小
- Unix/BSD/Linux的口令机制初探(转)
- 海南大学 838信号与系统专业课的感悟
- 部署阿里云盘的目录文件列表程序教程
- 安科瑞精密配电列头柜产品XXX数据中心案例分享-安科瑞华楠