22
Мар
2017

Два варианта авторизации в одном приложении, в разных окнах, через WebView

Столкнулся с проблемой при использовании компонента WebView и WebEngine . есть 2 кнопки

    @FXML
    Button bt1;

    @FXML
    Button bt2;


    public void bt1_click(ActionEvent actionEvent) throws Exception {
        PostLP.login = "логин1";
        PostLP.password = "пароль1";
        Application ap = new Boiler_control();
        ap.start(new Stage());
   }


    public void bt2_click(ActionEvent actionEvent) throws Exception {
        PostLP.login = "логин2";
        PostLP.password = "пароль2";
        Application ap = new Boiler_control();
        ap.start(new Stage());
    }

соответственно вот код самого класса Boiler_control

package boilercontrolpanel;

import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.Worker.State;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.ProgressBar;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;

public class Boiler_control extends Application {

    public enum Status {
        login_request,
        control_request,
    }

    Status status = Status.login_request;

    String setLogin = "document.getElementsByName('username')[0].value='" + PostLP.login + "';";
    String setPassword = "document.getElementsByName('password')[0].value='" + PostLP.password + "';";
    String btnLogin = "document.getElementById('btnLogin').click();";



    @Override
    public void start(Stage primaryStage) throws Exception{
        Parent root = FXMLLoader.load(getClass().getResource("boiler_control.fxml"));

        WebView webView = (WebView) root.lookup("#web_view");
        webView.setVisible(true);
        WebEngine webEngine = webView.getEngine();
        webEngine

        webEngine.load("https://сайт");

        Label label = (Label) root.lookup("#label");

        ProgressBar progressBar = (ProgressBar) root.lookup("#prbar");

        progressBar.progressProperty().bind(webEngine.getLoadWorker().progressProperty());

        webEngine.getLoadWorker().stateProperty().addListener(
                new ChangeListener<State>() {
                    @Override
                    public void changed(ObservableValue ov, State oldState, State newState) {
                        if (newState == State.SUCCEEDED) {
                            // Если страница загрузилась то
                            if (status == Status.control_request) {
                                progressBar.setVisible(false);
                                webView.setVisible(true);
                            }

                            if (status == Status.login_request) {
                                // Авторизуемся
                                label.setText("Загрузка интерфейса управления горелкой");
                                login(webEngine);
                                status = Status.control_request;
                            }

                        }
                    }
                });

        primaryStage.setTitle("Консоль управления котельной");
        primaryStage.setScene(new Scene(root, 900, 600));
        primaryStage.show();
    }

    private void login(WebEngine webEngine) {
        webEngine.executeScript(setLogin);
        webEngine.executeScript(setPassword);
        webEngine.executeScript(btnLogin);
    }


    public static void main(String[] args) {
        launch(args);
    }
}

При нажатии одной из кнопок мы изначально попадаем на дефолтную страницу авторизации и всё проходит хорошо, но если закрыть окно и нажать на 2ю кнопку то хотя окна совершенно разные и компоненты WebView разные, но во вновь созданном окне отображается страница с уже авторизованным пользователем.

Вопрос почему это происходит ? неужели WebEngine является общим для всех экземпляров WebView текущего приложения. И как мне сделать чтобы в разных окнах был свой пользователь (как будто бы открыты разные браузеры ?)

Источник: https://ru.stackoverflow.com/questions/642889/%D0%94%D0%B2%D0%B0-%D0%B2%D0%B0%D1%80%D0%B8%D0%B0%D0%BD%D1%82%D0%B0-%D0%B0%D0%B2%D1%82%D0%BE%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8-%D0%B2-%D0%BE%D0%B4%D0%BD%D0%BE%D0%BC-%D0%BF%D1%80%D0%B8%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B8-%D0%B2-%D1%80%D0%B0%D0%B7%D0%BD%D1%8B%D1%85-%D0%BE%D0%BA%D0%BD%D0%B0%D1%85-%D1%87%D0%B5%D1%80%D0%B5%D0%B7-webview

Share

Тебе может это понравится...