Lal*_*rma 8 ssl android android-glide
我将服务器迁移HTTP到了HTTPS我已经使用自签名证书发送网络请求HttpUrlConnection并且它工作但是对于图像加载它不起作用,因为我使用Glide进行图像加载.
javax.net.ssl.SSLHandshakeException:java.security.cert.CertPathValidatorException:未找到证书路径的信任锚.从https URL通过滑动库加载图像
Glide.with(mContext).load(currentItem.getImage_path().replace(" ", "%20"))
.listener(new RequestListener<String, GlideDrawable>() {
@Override
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
genericViewHolder.imageView_1.setImageResource(R.drawable.image_thumbnail);
genericViewHolder.progressBar.setVisibility(View.GONE);
return false;
}
@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
genericViewHolder.progressBar.setVisibility(View.GONE);
return false;
}
}).into(genericViewHolder.imageView_1);
Run Code Online (Sandbox Code Playgroud)
我尝试使用此链接并使用GlideModule但它似乎不起作用.请帮忙.
sus*_*vi 7
问题是关于证书请点击此链接 - /sf/answers/2732270341/
这将绕过证书并允许您进入系统
也可以看到这个链接 - https://futurestud.io/tutorials/glide-module-example-accepting-self-signed-https-certificates
创建您的自定义GlideModule类,OkHttpUrlLoader类并附上Glide,如上所述
你必须把
<meta-data
android:name="io.futurestud.tutorials.glide.glidemodule.CustomImageSizeGlideModule"
android:value="GlideModule" />
Run Code Online (Sandbox Code Playgroud)
AndroidMainifiest文件的内部应用程序标记https://github.com/fs-opensource/android-tutorials-glide/blob/master/app/src/main/AndroidManifest.xml
对于滑翔4
@GlideModule
public class MyGlideModule extends AppGlideModule {
@Override
public void registerComponents(@NonNull Context context, @NonNull Glide glide, @NonNull Registry registry) {
//To Attach Self Signed Ssl Certificate
/*OkHttpClient okHttpClient = new OkHttpClient.Builder()
.sslSocketFactory(sslSocketFactory, X509TrustManager)
.build();*/
//Unsafe Okhttp client
OkHttpClient okHttpClient= UnsafeHttpsClient.getUnsafeOkHttpClient();
registry.replace(GlideUrl.class, InputStream.class, new OkHttpUrlLoader.Factory(okHttpClient));
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以使用我从“使用 okHttp 信任所有证书”的答案中复制的代码您可以使用我从“使用 okHttp \xe2\x80\x94
\n\n\n创建类 UnsafeOkHttpClient.java
\nRun Code Online (Sandbox Code Playgroud)\npublic class UnsafeOkHttpClient {\npublic static OkHttpClient getUnsafeOkHttpClient() {\n try {\n // Create a trust manager that does not validate certificate chains\n final TrustManager[] trustAllCerts = new TrustManager[] {\n new X509TrustManager() {\n @Override\n public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String\nauthType) 抛出证书异常 {\n}
\nRun Code Online (Sandbox Code Playgroud)\n@Override\n public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String\nauthType) 抛出证书异常 {\n}
\nRun Code Online (Sandbox Code Playgroud)\n@Override\n public java.security.cert.X509Certificate[] getAcceptedIssuers() {\n return new java.security.cert.X509Certificate[]{};\n }\n }\n };\n\n // Install the all-trusting trust manager\n final SSLContext sslContext = SSLContext.getInstance("SSL");\n sslContext.init(null, trustAllCerts, new java.security.SecureRandom());\n\n // Create an ssl socket factory with our all-trusting manager\n final SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();\n\n OkHttpClient.Builder builder = new OkHttpClient.Builder();\n builder.sslSocketFactory(sslSocketFactory, (X509TrustManager)trustAllCerts[0]);\n builder.hostnameVerifier(new HostnameVerifier() {\n @Override\n public boolean verify(String hostname, SSLSession session) {\n return true;\n }\n });\n\n OkHttpClient okHttpClient = builder.build();\n return okHttpClient;\n } catch (Exception e) {\n throw new RuntimeException(e);\n }\n}\n}\n创建一个类 MyGlideModule.java
\nRun Code Online (Sandbox Code Playgroud)\n@GlideModule\npublic class MyGlideModule extends AppGlideModule {\n@Override\npublic void registerComponents(@NonNull Context context, @NonNull Glide glide, @NonNull Registry registry) {\n OkHttpClient okHttpClient= UnsafeOkHttpClient.getUnsafeOkHttpClient();\n registry.replace(GlideUrl.class, InputStream.class, new OkHttpUrlLoader.Factory(okHttpClient));\n}\n}\n创建一个类 OkHttpStreamFetcher.java
\nRun Code Online (Sandbox Code Playgroud)\npublic class OkHttpStreamFetcher implements DataFetcher<InputStream>, okhttp3.Callback {\nprivate static final String TAG = "OkHttpFetcher";\nprivate final Call.Factory client;\nprivate final GlideUrl url;\nprivate InputStream stream;\nprivate ResponseBody responseBody;\nprivate DataCallback<? super InputStream> callback;\nprivate volatile Call call;\n\n// Public API.\n@SuppressWarnings("WeakerAccess")\npublic OkHttpStreamFetcher(Call.Factory client, GlideUrl url) {\n this.client = client;\n this.url = url;\n}\n\n@Override\npublic void loadData(\n @NonNull Priority priority, @NonNull final DataCallback<? super InputStream> callback) {\n Request.Builder requestBuilder = new Request.Builder().url(url.toStringUrl());\n for (Map.Entry<String, String> headerEntry : url.getHeaders().entrySet()) {\n String key = headerEntry.getKey();\n requestBuilder.addHeader(key, headerEntry.getValue());\n }\n Request request = requestBuilder.build();\n this.callback = callback;\n\n call = client.newCall(request);\n call.enqueue(this);\n}\n\n@Override\npublic void onFailure(@NonNull Call call, @NonNull IOException e) {\n if (Log.isLoggable(TAG, Log.DEBUG)) {\n Log.d(TAG, "OkHttp failed to obtain result", e);\n }\n\n callback.onLoadFailed(e);\n}\n\n@Override\npublic void onResponse(@NonNull Call call, @NonNull Response response) {\n responseBody = response.body();\n if (response.isSuccessful()) {\n long contentLength = Preconditions.checkNotNull(responseBody).contentLength();\n stream = ContentLengthInputStream.obtain(responseBody.byteStream(),\ncontentLength);\ncallback.onDataReady(stream);\n} else {\ncallback.onLoadFailed(new HttpException(response.message(), response.code()));\n}\n}
\nRun Code Online (Sandbox Code Playgroud)\n@Override\npublic void cleanup() {\n try {\n if (stream != null) {\n stream.close();\n }\n } catch (IOException e) {\n // Ignored\n }\n if (responseBody != null) {\n responseBody.close();\n }\n callback = null;\n}\n\n@Override\npublic void cancel() {\n Call local = call;\n if (local != null) {\n local.cancel();\n }\n}\n\n@NonNull\n@Override\npublic Class<InputStream> getDataClass() {\n return InputStream.class;\n}\n\n@NonNull\n@Override\npublic DataSource getDataSource() {\n return DataSource.REMOTE;\n}\n}\n创建一个类 OkHttpUrlLoader.java
\nRun Code Online (Sandbox Code Playgroud)\npublic class OkHttpUrlLoader implements ModelLoader<GlideUrl, InputStream> {\n\nprivate final Call.Factory client;\n\n// Public API.\n@SuppressWarnings("WeakerAccess")\npublic OkHttpUrlLoader(@NonNull Call.Factory client) {\n this.client = client;\n}\n\n@Override\npublic boolean handles(@NonNull GlideUrl url) {\n return true;\n}\n\n@Override\npublic LoadData<InputStream> buildLoadData(\n @NonNull GlideUrl model, int width, int height, @NonNull Options options) {\n return new LoadData<>(model, new OkHttpStreamFetcher(client, model));\n}\n\npublic static class Factory implements ModelLoaderFactory<GlideUrl, InputStream> {\n private static volatile Call.Factory internalClient;\n private final Call.Factory client;\n\n private static Call.Factory getInternalClient() {\n if (internalClient == null) {\n synchronized (Factory.class) {\n if (internalClient == null) {\n internalClient = new OkHttpClient();\n }\n }\n }\n return internalClient;\n }\n\n public Factory() {\n this(getInternalClient());\n }\n\n public Factory(@NonNull Call.Factory client) {\n this.client = client;\n }\n\n @NonNull\n @Override\n public ModelLoader<GlideUrl, InputStream> build(MultiModelLoaderFactory multiFactory) {\n return new OkHttpUrlLoader(client);\n }\n\n @Override\n public void teardown() {\n // Do nothing, this instance doesn\'t own the client.\n }\n}\n}\n添加应用程序/build.gradle
\nRun Code Online (Sandbox Code Playgroud)\nimplementation \'com.github.bumptech.glide:glide:4.10.0\'\nannotationProcessor \'com.github.bumptech.glide:compiler:4.10.0\'\nimplementation("com.github.bumptech.glide:okhttp3-integration:4.2.0")\n{\n排除组:\'glide-parent\'\n}
\n在AndroidManifest.xml中
\nRun Code Online (Sandbox Code Playgroud)\n<application>\n<meta-data\n android:name="Replace_your_package_name.UnsafeOkHttpClient"\n android:value="MyGlideModule" />\n</application>\n
| 归档时间: |
|
| 查看次数: |
12151 次 |
| 最近记录: |