1

我正在为 Retrofit2 使用自定义拦截器,以便以漂亮的格式记录所有请求/响应 json。

问题是此日志不仅用于本地调试目的,而且还发送到 Instabug(类似于 Crashlytics)以帮助调试用户报告的问题或崩溃。

因此,重要的是该服务中的信息不包含用户可识别信息,如电子邮件、密码等。

因为在拦截器中,我们只获得原始请求/响应是手动检查所有可能的敏感字段并将它们从记录的 json 版本中删除的唯一解决方案?

4

1 回答 1

0

这是从日志中过滤任何请求/响应参数的简单方法:

// Request patterns to filter
private static final String[] REQUEST_PATTERNS = {
    "Content-Type",
};
// Response patterns to filter
private static final String[] RESPONSE_PATTERNS = {"Server", "server", "X-Powered-By", "Set-Cookie", "Expires", "Cache-Control", "Pragma", "Content-Length", "access-control-allow-origin"};

// Log requests and response
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
    @Override
    public void log(String message) {

        // Blacklist the elements not required
        for (String pattern: REQUEST_PATTERNS) {
            if (message.startsWith(pattern)) {
                return;
            }
        }
        // Any response patterns as well...
        for (String pattern: RESPONSE_PATTERNS) {
            if (message.startsWith(pattern)) {
                return;
            }
        }
        Log.d("RETROFIT", message);
    }
});
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);

这是完整的要点:

https://gist.github.com/mankum93/179c2d5378f27e95742c3f2434de7168

于 2019-08-15T16:59:59.843 回答