任何App上線應(yīng)該杜絕http請(qǐng)求的存在??蛻舳丝梢酝ㄟ^(guò)AOP非侵入式監(jiān)控所有的請(qǐng)求鏈接,從而實(shí)現(xiàn)非HTTPS請(qǐng)求鏈接的監(jiān)控、上報(bào)、BUG修復(fù)。
@Aspect
public class OkHttpClientAop {
@Pointcut("execution(okhttp3.OkHttpClient.Builder.new(..))")
public void builder() {
}
@After("builder()")
public void newBuilderAfter(JoinPoint joinPoint) {
OkHttpClient.Builder builder = (OkHttpClient.Builder) joinPoint.getTarget();
builder.addInterceptor(new HttpsMonitor());
}
static class HttpsMonitor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
String rawUrl = request.url().uri().toString();
StringBuilder sb = new StringBuilder("\u21E0 ");
sb.append("isHttps:").append(request.url().isHttps());
sb.append(";rawUrl:").append(rawUrl);
if (!request.url().isHttps()) {
Log.e("demon", sb.toString());
} else {
Log.e("demon", sb.toString());
}
return chain.proceed(request);
}
}
}