【发布时间】:2021-09-14 04:07:47
【问题描述】:
我正在尝试使用 HurlStack 在 volley 中实现 SSL Pinning。
在 OkHttpStack 类中,如何将我的 mClient 提供给库以创建连接?当前未使用 mClient,因此 SSL Pinning 不起作用。我应该在哪里传递这个 mClient 以便库可以将它用于 SSL Pinning?
我需要使用当前架构通过 volley 实现 SSL Pinning。有什么办法吗?
public class OkHttpStack extends HurlStack {
private final OkHttpClient mClient;
public OkHttpStack(Context context) {
this(new OkHttpClient(), context);
}
public OkHttpStack(OkHttpClient client, Context context) {
if (client == null) {
throw new NullPointerException("Client must not be null.");
}
CertificatePinner pinner = new CertificatePinner.Builder()
.add("xyz.com", "sha256/XXXXXXXSKBC8dHnQYY6ncwwUtv2ydjxGAlXXXXXXXXs=").build();
mClient = client.newBuilder().certificatePinner(pinner).build();
}
@Override
protected HttpURLConnection createConnection(URL url) throws IOException {
return (HttpURLConnection) url.openConnection();
}
}
public class VolleyQueueUtils {
private static final String DEFAULT_CACHE_DIR = "volley";
private static final int DISK_CACHE_MAX_SIZE = 20 * 1024 * 1024;
private static RequestQueue sGeneralRequestQueue;
private static DiskBasedCache sDiskCache;
private static RequestQueue sImageQueue;
// private static ImageLoader sImageLoader;
private static RequestQueue sJobQueue;
private static RequestQueue sSingleThreadedRequestQueue;
static {
File cacheDir = new File(App.context.getCacheDir(), DEFAULT_CACHE_DIR);
sDiskCache = new DiskBasedCache(cacheDir, DISK_CACHE_MAX_SIZE);
ResponseDelivery delivery = new ExecutorDelivery(Executors.newFixedThreadPool(4));
ResponseDelivery deliverySingle = new ExecutorDelivery(Executors.newFixedThreadPool(1));
sGeneralRequestQueue =
new RequestQueue(sDiskCache, new BasicNetwork(new OkHttpStack(App.context)), 4, delivery);
// sGeneralRequestQueue = Volley.newRequestQueue(App.context, new OkHttpStack(App.context));
sGeneralRequestQueue.start();
sImageQueue = new RequestQueue(sDiskCache ,new BasicNetwork(new OkHttpStack(App.context)), 4, delivery);
sImageQueue.start();
sSingleThreadedRequestQueue = new RequestQueue(sDiskCache, new BasicNetwork(new OkHttpStack(App.context)), 1,
deliverySingle);
//sSingleThreadedRequestQueue.start();
// sImageLoader = new ImageLoader(sImageQueue, new LruBitmapCache());
// Job queue for background tasks
sJobQueue = new RequestQueue(new NoCache(), new BasicNetwork(new OkHttpStack(App.context)), 4, delivery);
sJobQueue.start();
}
public static ImageLoader getImageLoader() {
return BitmapQueueUtils.getLoaderInstance();
}
public static RequestQueue getGeneralRequestQueue() {
return sGeneralRequestQueue;
}
public static RequestQueue getSingleThreadedRequestQueue() {
return sSingleThreadedRequestQueue;
}
public static RequestQueue getJobQueue () {
return sJobQueue;
}
}
【问题讨论】:
标签: android ssl-certificate android-volley