android: glide: 访问https地址图片时报错
一,报错信息
Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException:
Trust anchor for certification path not found.
如图:

二,解决
1,引入第三方库:
编辑build.gradle
implementation 'com.github.bumptech.glide:okhttp3-integration:4.12.0'
然后点击Sync Now
注意和okhttp的版本保持一致
2,代码:
在application的oncreate中添加:
@Override
public void onCreate() {
super.onCreate();
// 解决glide加载https证书问题
try {
Glide.get(this).getRegistry().replace(
GlideUrl.class, InputStream.class,
new OkHttpUrlLoader.Factory(getSSLOkHttpClient()));
} catch (Exception e) {
e.printStackTrace();
}
// 在这里执行全局初始化
}
/**
* 设置https 访问的时候对所有证书都进行信任
*
* @throws Exception
*/
private OkHttpClient getSSLOkHttpClient() throws Exception {
final X509TrustManager trustManager = new 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[0];
}
};
SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(null, new TrustManager[]{trustManager}, new SecureRandom());
SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
return new OkHttpClient.Builder()
.sslSocketFactory(sslSocketFactory, trustManager)
.hostnameVerifier(new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
})
.build();
}
三,测试效果

浙公网安备 33010602011771号