1

我遇到了这样一种情况,即我在一个公司网络上,该网络有一个无线接入点,需要安全登录才能访问网络。大约 30 分钟的空闲时间后,它将提示用户重新进行身份验证。

在我的应用程序(使用改造 + okhttp)中,“您的会话已超时”表现为“java.io.IOException:未验证主机名'example.com'”异常。更仔细的检查表明,“example.com”正在根据无线接入点的证书进行验证,与证书关联的唯一有效域是接入点的域 (securelogin.arubanetworks.com)。这就是触发异常的原因。如果我离开应用程序,启动浏览器,使用接入点重新进行身份验证并返回应用程序,我仍然会收到相同的主机名未验证问题。这给我留下了两个问题:

1) 除了等待和处理 IOException 之外,有没有更好的方法来检测这种超时情况?

2) 一旦会话超时,我似乎无法让 http 客户端停止尝试根据接入点证书验证主机名。一旦用户重新验证(通过浏览器)而不重新启动应用程序,有没有办法恢复?

4

1 回答 1

1
  1. 没有很好的方法来应对强制接入点。我能想到的最好的方法是在已知的 HTTP 地址 ( http://somedomainyoucontrol.com )上托管已知内容,并查看对该域的 HTTP 请求是否被重定向到域外。这似乎是 Mac OS X 用来检测强制接入点的方法。它使用 apple.com 上的一个页面。

  2. 我怀疑这是一个 DNS 缓存,而不是 HTTP 客户端,这让你在重新尝试时感到悲伤。一旦 SSL 握手失败,HTTP 客户端将不会保持连接。您需要配置强制门户的 DNS 以设置非常短的 TTL。

于 2014-04-18T01:46:08.257 回答