2016-11-25 84 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预期的那样工作。但是,我没有尝试过,因为我发现了另一种解决方法。将深入挖掘这种方法。 –