java javafx webview_JavaFX WebView无法加载某些网站

小编典典

原因是 java.lang.Throwable: SSL handshake failed

TrustManager trm = new X509TrustManager() {

public X509Certificate[] getAcceptedIssuers() {return null;}

public void checkClientTrusted(X509Certificate[] certs, String authType) {}

public void checkServerTrusted(X509Certificate[] certs, String authType) {}

};

SSLContext sc = SSLContext.getInstance("SSL");

sc.init(null, new TrustManager[] { trm }, null);

HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

我怎么知道那是 SSL handshake failed

webView.getEngine().getLoadWorker().stateProperty().addListener(

new ChangeListener() {

public void changed(ObservableValue ov,

Worker.State oldState, Worker.State newState) {

System.out.println(webView.getEngine().getLoadWorker().exceptionProperty());

...

还添加添加-Djavax.net.debug=all到VMOption显示

URL-Loader-1,处理异常:javax.net.ssl.SSLHandshakeException:

sun.security.validator.ValidatorException:PKIX路径构建失败:

sun.security.provider.certpath.SunCertPathBuilderException:

无法找到到请求目标的有效认证路径

2020-11-01

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于JavaFXWebView来说,默认情况下是不会接受所有网站证书的。WebView会使用JavaFX内置的证书存储区域来验证网站的证书。如果某个网站的证书无效或不被信任,WebView会拒绝加载网站。 然而,你可以通过实现自定义的TrustManager来绕过证书验证,使WebView接受所有网站证书。以下是一个示例代码: ```java import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.web.WebEngine; import javafx.scene.web.WebView; import javafx.stage.Stage; import javax.net.ssl.*; public class Main extends Application { public static void main(String[] args) { launch(args); } @Override public void start(final Stage primaryStage) { WebView webView = new WebView(); WebEngine webEngine = webView.getEngine(); // 创建一个TrustManager,接受所有证书 TrustManager[] trustAllCerts = new TrustManager[]{ new X509TrustManager() { public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; } public void checkClientTrusted( java.security.cert.X509Certificate[] certs, String authType) { } public void checkServerTrusted( java.security.cert.X509Certificate[] certs, String authType) { } } }; // 创建SSL上下文,信任所有证书 try { SSLContext sslContext = SSLContext.getInstance("SSL"); sslContext.init(null, trustAllCerts, new java.security.SecureRandom()); // 应用自定义的SSL上下文到WebView HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory()); } catch (Exception e) { e.printStackTrace(); } webEngine.load("https://example.com"); // 加载你想要访问的网站 primaryStage.setScene(new Scene(webView)); primaryStage.show(); } } ``` 上述代码将创建一个自定义的TrustManager,该TrustManager接受所有证书。然后,通过创建一个SSL上下文并将其应用到WebView中,使WebView接受所有网站证书。请注意,这种做法可能会导致安全风险,因为WebView将不再验证网站的真实性和可信度。应谨慎使用,并确保你了解潜在的风险。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值