【问题标题】:JavaFX WebView cookieJavaFX WebView cookie
【发布时间】:2013-07-08 10:32:01
【问题描述】:

如何获取通过从 JavaFX WebView 连接到网页设置的 cookie。我想使用此 cookie 以便在 originaol 登录后打开与网站的单独连接。 有没有办法做到这一点以及如何做到这一点?

感谢您的宝贵时间

【问题讨论】:

    标签: webview javafx


    【解决方案1】:

    我有一个本地“login.html”,它对我的​​服务器进行 AJAX 调用以登录。

    JavaFX 应用程序代码:

    public class Main extends Application {
        public static void main(String[] args) {
            launch(args);
        }
    
        @Override
        public void start(Stage primaryStage) {
            primaryStage.setTitle("Battleround client");
    
            URL loginPageUrl = Main.class.getResource("/pages/login.html");
    
            final WebView webview = new WebView();
            final WebEngine webEngine = webview.getEngine();
    
            webEngine.setJavaScriptEnabled(true);
            webEngine.load(loginPageUrl.toString());
    
            /*
             * Alright, this piece of code might be hard to understand. Basically
             * we're adding a JavaScript object that's actually a Java object. So we
             * can call Java methods from JavaScript. And we're adding this
             * javascript object as soon as the page has been fully loaded.
             */
            webEngine.getLoadWorker().stateProperty().addListener(new ChangeListener<Worker.State>() {
                @Override
                public void changed(ObservableValue<? extends State> ov, State t, State t1) {
                    if (t1 == Worker.State.SUCCEEDED) {
                        JSObject window = (JSObject) webEngine.executeScript("window");
                        window.setMember("java", new AuthenticationApplication());
                    }
                }
        });
    
        StackPane root = new StackPane();
        root.getChildren().add(webview);
        primaryStage.setScene(new Scene(root, 400, 500));
        primaryStage.show();
    }
    
    public class AuthenticationApplication {
        public void start(String JSESSIONID) {
            // From here on I start my game with the JSESSIONID from the login call.
        }
    }
    

    我在 login.html 中的 JavaScript 代码:

    function login(username, password) {
        var xmlHttp = new XMLHttpRequest();
        if (window.ActiveXObject) {
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
    
        var url = "http://192.168.2.7:8888/Login";
        var params = "username=" + userName + "&password=" + password;
        xmlHttp.open("POST", url, true);
    
        // Send the proper header information along with the request
        xmlHttp.setRequestHeader("Content-type",
            "application/x-www-form-urlencoded");
        xmlHttp.setRequestHeader("Content-length", params.length);
        xmlHttp.setRequestHeader("Connection", "close");
        xmlHttp.withCredentials = "true";
        xmlHttp.onreadystatechange = function() {// Call a function when the state changes.
            if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
                if(xmlHttp.responseText == "login.successful") {
                    document.getElementById("loginForm").innerHTML = getResources("login.successful");
                    var setCookieHeader = xmlHttp.getResponseHeader('Set-Cookie');
                    java.start(setCookieHeader.split(";")[0].split("=")[1]); // Obtain the JSESSIONID, and send it to the java code. Warning: this code will mess up if there's other cookies.
                } else {
                    document.getElementById("validationMessage").innerHTML = getResources(xmlHttp.responseText);
                }
            }
        };
        xmlHttp.send(params);
    }
    
    function getResources(key) {
        var resources = {};
    
        resources["login.already.logged.in"] = "You are already logged in! Log out first if you want to try again.";
        resources["login.error"] = "The login failed because an error occurred, Sorry!";
        resources["login.failed"] = "User name and password do not match.";
        resources["login.successful"] = "Login succeeded.";
    
        return resources[key];
    }
    

    【讨论】:

      猜你喜欢
      • 2018-06-23
      • 2013-01-01
      • 2014-06-18
      • 2015-03-22
      • 2014-08-30
      • 2016-01-16
      • 1970-01-01
      • 1970-01-01
      • 2020-05-31
      相关资源
      最近更新 更多