2016-11-25 82 views
0

我做出HttpsURLConnection如下:HttpsURLConnection的顯示安全警告對話框,而不是catch異常

 try 
     { 
      URL url = new URL(host); 
      HttpsURLConnection connection = (HttpsURLConnection) url.openConnection(); 
      connection.connect(); 
      logger.debug(httpURLConnection.getResponseCode() == HttpURLConnection.HTTP_OK); 
     } 
     catch (Exception ex) 
     { 
      logger.error(ex.getMessage()); 
     } 

我測試沒有一個有效的證書host,所以當我在Eclipse測試,它趕上SSLHandshakeException其其精細。

然而,當我部署爲Webstart的,它並沒有去追趕條款,但顯示我警告對話框來代替:

enter image description here

如果用戶單擊繼續,它通過成功的connect()

有無論如何,我可以捕捉異常,而不是讓用戶點擊繼續從這個對話框?

回答

2

要禁用對話框使用此:

connection.setAllowUserInteraction(false);

現在你應該立即得到異常,如果JVM是不愉快的證書。

+0

它看起來像一個有效的設置,謝謝!不幸的是,我會再試一次,因爲我已經找到了一個解決方法,不用調用「connect」,而是發出一個API請求(如ping),而且如果失敗則成功捕獲異常 –

2

的Java Webstart的插入自己的SSLSocketFactory的

https://docs.oracle.com/javase/tutorial/deployment/webstart/security.html

HTTPS證書的動態下載

Java Web Start的動態導入證書,瀏覽器通常 做。爲此,Java Web Start會使用java.protocol.handler.pkgs系統屬性設置其自己的https處理程序,以便爲SSLSocketFactory和HostnameVerifier初始化默認值 。它使用方法HttpsURLConnection.setDefaultSSLSocketFactory和 HttpsURLConnection.setDefaultHostnameVerifier設置默認值 。

如果應用程序使用這兩種方法,確保他們 調用Java Web Start的初始化HTTPS處理器, 否則您的自定義處理程序將通過Java Web Start的 默認處理器更換後。

可以確保你自己定製的SSLSocketFactory和 HostnameVerifiter是通過執行下列操作之一用於:

安裝自己的HTTPS處理器,以取代Java Web Start的HTTPS 處理程序。在您的應用程序中,只有在創建了第一個https URL對象之後,纔會調用 HttpsURLConnection.setDefaultSSLSocketFactory或 HttpsURLConnection.setDefaultHostnameVerifier,該對象首先執行Java Web Start處理器初始化代碼。

您可以在您的代碼恢復與

SSLContext context = SSLContext.getInstance("TLS"); 
HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory()); 

我沒有檢查里程如何獲得原始的SSLContext,您可能需要進行深入分析。

+0

感謝,非常有用的信息,現在我知道它爲什麼沒有像Webstart預期的那樣工作。但是,我沒有嘗試過,因爲我發現了另一種解決方法。將深入挖掘這種方法。 –