gpt4 book ai didi

okhttp - 在 OkHttp 中使用 `call.cancel()` 内的 `EventListener.dnsEnd()` 允许列出 IP 地址

转载 作者:行者123 更新时间:2023-12-03 23:07:15 27 4
gpt4 key购买 nike

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

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

我知道,在 documentation它说不要改变调用参数等:

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

但是,由于我不关心调用是否试图到达允许列表之外的地址,所以我看不到这个实现的问题。

我想知道是否有人有这方面的经验,为什么这可能是一个问题?
我对此进行了测试,它似乎工作正常。

最佳答案

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

但取消并不是将允许的 IP 地址限制在列表中的最佳方式。您可以改为实现 Dns 接口(interface)。您的实现应该委托(delegate)给 Dns.SYSTEM,然后他们将其结果过滤到您的许可名单中。这样您就不必担心取消比赛。

关于okhttp - 在 OkHttp 中使用 `call.cancel()` 内的 `EventListener.dnsEnd()` 允许列出 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61637256/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com