gpt4 book ai didi

java - JavaFX 应用程序中的 iFrame 在 Linux 上运行时不加载某些页面

转载 作者:太空宇宙 更新时间:2023-11-04 03:54:12 26 4
gpt4 key购买 nike

在我的 Java FX 应用程序中,我应该加载一个简单的 HTML 页面,其中包含一个显示外部网站的 iframe。我知道我可以使用 webEngine.load() 加载网站,但作为要求,我必须以这种方式实现它(我正在尝试将 Duo Security Web SDK 合并到我们的 Java 应用程序中)。

在 Windows 上,一切正常。然而,某些网站无法在 Linux(Debian、Fedora)上加载。我可以显示 gmail (https)、espn.com 或 en.wikipedia.org 等网站。但是谷歌和雅虎不会加载。我不认为这是 https 或 flash 问题。请参阅下面的代码。

Java:

webEngine.getLoadWorker().stateProperty().addListener(
new javafx.beans.value.ChangeListener<State>() {
@Override
public void changed(ObservableValue ov, State oldState, State newState) {
if (newState == State.SUCCEEDED) {
webEngine.executeScript(
"window.duoHost = '"+duoHost+"';"
+ "window.duoSigRequest = '"+duoSigRequest+"';"
+ "loadDuoOptions();");
JSObject jsobj = (JSObject) webEngine.executeScript("window");
jsobj.setMember("java", new Bridge());
System.out.println("Set up done");
}
}
});

HTML:

<head>
<title>Designer Login with Duo </title>
<script src="Duo-Web-v1.bundled.js"></script>
<script>
function loadDuoOptions(){
Duo.init({
'host' : window.duoHost,
'sig_request' : window.duoSigRequest
});
Duo.ready();
}
window.processDuoResponse = function(data){
duoResponse = data;
loginHandler.verifyDuoResponse(duoResponse);
}
</script>
</head>
<body>
<iframe id="duo_iframe" width="500" height="500" frameborder="0"></iframe>
</html>

最佳答案

这修复了 HTTPS:

private void installCertificateVerificationBypassTools() {
this.installCustomTrustManager();
this.installCustomHostNameverifier();

}

private void installCustomTrustManager() {
System.out.println("Installing custom trust manager");
try {
TrustManager[] nonDiscriminantTrustManager = new TrustManager[]{new X509TrustManager() {
@Override
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}

@Override
public void checkClientTrusted(X509Certificate[] certs, String authType) {
// ignore client trust check
}

@Override
public void checkServerTrusted(X509Certificate[] certs, String authType) {
// ignore server trust check
}
}};
final SSLContext ret = SSLContext.getInstance("SSL");
ret.init(null, nonDiscriminantTrustManager, new SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(ret.getSocketFactory());
} catch (KeyManagementException | NoSuchAlgorithmException ex) {

}
}

private void installCustomHostNameverifier() {
System.out.println("Installing custom hostname verifier");
HostnameVerifier hv = new HostnameVerifier() {
@Override
public boolean verify(String string, SSLSession ssls) {
System.out.println("Verifying connection...");
showSSLSessionDetails(ssls);
if (ssls.getProtocol().contains("https")) {
System.out.println("https session allowed.");
}
return true;
}
};
HttpsURLConnection.setDefaultHostnameVerifier(hv);
}

myClass extends Application 类的 public void start(Stage mainStage) 方法中使用 installCertificateVerificationBypassTools()

请注意,这接受所有传入的证书。

关于java - JavaFX 应用程序中的 iFrame 在 Linux 上运行时不加载某些页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25316103/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com