2014-04-17 41 views
1

我遇到了一種情況,即我在具有需要安全登錄才能訪問網絡的無線接入點的企業網絡中。大約30分鐘的空閒時間後,它會提示用戶重新進行身份驗證。Android:無線接入點會話超時和主機名認證錯誤

在我的應用程序中(使用retrofit + okhttp),「你的會話超時」表現爲「java.io.IOException:Hostname'example.com'未驗證」異常。更仔細的檢查表明,'example.com'正在針對無線接入點的證書進行驗證,唯一與證書關聯的有效域是接入點的域(securelogin.arubanetworks.com)。這是觸發異常的原因。如果我離開應用程序,啓動瀏覽器,重新驗證w /接入點並返回到應用程序,我仍然得到相同的主機名未驗證問題。這讓我有兩個問題:

1)有沒有更好的方法來檢測這種超時情況,而不是等待和處理IOException?

2)我似乎無法讓http客戶端在會話超時後停止嘗試驗證接入點證書的主機名。一旦用戶重新驗證(通過瀏覽器)而無需重新啓動應用程序,是否有恢復的方法?

回答

1
  1. 有沒有一種很好的方式來處理俘虜接入點。我能想到的最好方法是將已知內容存放在已知的HTTP地址(http://somedomainyoucontrol.com)處,並查看對該域的HTTP請求是否被重定向到域外。這似乎是Mac OS X用來檢測捕獲接入點的原因;它在apple.com上使用一個頁面。

  2. 我懷疑這是一個DNS緩存,而不是HTTP客戶端,這會讓你對重新嘗試感到悲傷。一旦SSL握手失敗,HTTP客戶端將不會保持連接。您需要配置強制網絡的DNS以設置非常短的TTL。