在OkHttp的EventListener.dnsEnd()中使用`call.cancel()`将IP地址列入白名单

问题描述 投票:1回答:1

我在EventListener中重写dnsEnd()函数:

@Override
    public void dnsEnd(Call call, String domainName, List<InetAddress> inetAddressList) {
        inetAddressList.forEach(address -> {
            logger.debug("checking if url ({}) is in whitelist", address.toString());
            if (!whitelist.contains(address)) {
                call.cancel();
            }
        });
    }

我知道,在documentation中说不更改呼叫参数等:

“所有事件方法必须快速执行,没有外部锁定,不能抛出异常,不能使事件参数发生变化,或者重新进入客户端。任何IO-写入文件或网络都应异步完成。”] >

但是,由于我不在乎该呼叫是否尝试到达白名单之外的地址,因此我看不到此实现的问题。

我想知道是否有人对此有经验,为什么这可能是个问题?我对此进行了测试,看来效果很好。

我在EventListener中重写dnsEnd()函数:@Override public void dnsEnd(Call call,String domainName,List inetAddressList){inetAddressList.forEach(...

okhttp
1个回答
0
投票

这很好,很安全。可能最奇怪的结果是,已取消事件将由已经处理DNS事件的线程触发。

© www.soinside.com 2019 - 2024. All rights reserved.