JavaFX WebView disable Same origin policy (allow cross domain requests)

前端 未结 3 1002
悲哀的现实
悲哀的现实 2020-12-19 04:50

I\'m developing a JavaFX application that is mostly a glorified web page. It\'s a desktop application (it\'s no embedded into a web page) and it has a Web View for the main

相关标签:
3条回答
  • 2020-12-19 05:37

    Basically, javaFx has the issue which is coupled with CORS - https://javafx-jira.kenai.com/browse/RT-35868. Assuming that web services which you are using, have CORS enabled you can try the following approach:

    • System.setProperty("sun.net.http.allowRestrictedHeaders", "true")

    OR

    • java -Dsun.net.http.allowRestrictedHeaders=true <your main class here>

    Hope it will help you

    0 讨论(0)
  • 2020-12-19 05:37

    Since you are already running in JavaFX as a desktop application, you can do your JavaScript call via Java, where the same-origin policy does not apply.

    Alternatively, this answer to the SO question you've posted seems to be a viable alternative.

    0 讨论(0)
  • 2020-12-19 05:41

    Look at this answer first, then look at my answer:How can I work around YouTube API embed restrictions like other websites?

    if ("sun/net/www/protocol/http/HttpURLConnection".equals(className)) {
            try {
                CtClass ctClass = classPool.makeClass(new ByteArrayInputStream(classfileBuffer));
                CtMethod method = ctClass.getDeclaredMethod("getFilteredHeaderFields");
                // inject cross domain code
                injectCrossDomain(method);
                byteCode = ctClass.toBytecode();
                ctClass.detach();
            } catch (Exception e) {
                e.printStackTrace();
                throw new CatalinaException(e);
            }
    }
    
    
    ----------------injectCrossDomain----------------
    
    private void injectCrossDomain(CtMethod method) throws CannotCompileException {
            StringBuilder sb = new StringBuilder();
    
            sb.append("if (this.filteredHeaders != null) {");
            sb.append("    return this.filteredHeaders;");
            sb.append("} else {");
            sb.append("    java.util.HashMap var2 = new java.util.HashMap();");
            sb.append("    java.util.Map var1;");
            sb.append("    if (this.cachedHeaders != null) {");
            sb.append("        var1 = this.cachedHeaders.getHeaders();");
            sb.append("    } else {");
            sb.append("        var1 = this.responses.getHeaders();");
            sb.append("    }");
            sb.append("    java.util.Iterator var3 = var1.entrySet().iterator();");
            sb.append("    while(var3.hasNext()) {");
            sb.append("        java.util.Map.Entry var4 = (java.util.Map.Entry)var3.next();");
            sb.append("        String var5 = (String)var4.getKey();");
            sb.append("        java.util.List var6 = (java.util.List)var4.getValue();");
            sb.append("        java.util.ArrayList var7 = new java.util.ArrayList();");
            sb.append("        java.util.Iterator var8 = var6.iterator();");
            sb.append("        while(var8.hasNext()) {");
            sb.append("            String var9 = (String)var8.next();");
            sb.append("            String var10 = this.filterHeaderField(var5, var9);");
            sb.append("            if (var10 != null) {");
            sb.append("                var7.add(var10);");
            sb.append("            }");
            sb.append("        }");
            sb.append("        if (!var7.isEmpty()) {");
    
            // insert Access-Control-Allow-Origin:*
            sb.append("            var2.put(\"Access-Control-Allow-Origin\", java.util.Collections.singletonList(\"*\"));");
            // insert Access-Control-Allow-Headers:*
            sb.append("            var2.put(\"Access-Control-Allow-Headers\", java.util.Collections.singletonList(\"*\"));");
    
            sb.append("            var2.put(var5, java.util.Collections.unmodifiableList(var7));");
            sb.append("        }");
            sb.append("    }");
            sb.append("    return this.filteredHeaders = java.util.Collections.unmodifiableMap(var2);");
            sb.append("}");
    
            method.setBody(sb.toString());
    }
    
    
    
    
    0 讨论(0)
提交回复
热议问题