Как аутентифицировать клиент JavaFX в JavaEE


Я разрабатываю трехуровневое приложение с JavaFX на стороне клиента, JavaEE / Glassfish на стороне сервера и MySQL в качестве системы управления базами данных. Также я использовал REST и JSON для передачи данных по сети. Теперь я пытаюсь настроить аутентификацию, используя средства безопасности JavaEE. Я использую декларативный подход с аннотациями в enterprise beans, я уже настроил Glassfish file realm (add user / group) и glassfish-web.XML-дескриптор (добавление тегов имени группы и роли). JavaEE учебник сказать что если все необходимые приготовления сделаны, то при попытке клиента получить защищенный ресурс Glassfish должен попросить у клиента пару логин / пароль. Я понимаю, как это работает, если это будет веб-клиент, но в моем случае это настольный клиент JavaFX, и я не понимаю, как Glassfish ask client в настольном приложении. Как сделать механизм аутентификации с JavaFX-Glassfish. Пожалуйста помочь.

Обновление Всплывающее окно аутентификации, если я попытаюсь вызвать сервлет из браузера (Chrome, Т. е.) и механизм аутентификации способен работать. Но когда я открываю окно JavaFX, я ничего не вижу (белая сцена). Вот код класса (JavaFX WebView), который я безуспешно использовал для открытия окна входа в систему:

import javafx.application.Application;
import javafx.geometry.HPos;
import javafx.geometry.VPos;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.layout.Region;
import javafx.scene.paint.Color;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;

    public class WebViewSample extends Application {
        private Scene scene;

        @Override
        public void start(Stage stage) {
            // create the scene
            stage.setTitle("Web View");
            scene = new Scene(new Browser(), 750, 500, Color.web("#666970"));
            stage.setScene(scene);
            scene.getStylesheets().add("webviewsample/BrowserToolbar.css");
            stage.show();
        }

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

    class Browser extends Region {

        final WebView browser = new WebView();
        final WebEngine webEngine = browser.getEngine();

        public Browser() {

        getStyleClass().add("browser");
    webEngine.load("http://localhost:8080/ForthDynamicWebProject/FirstServlet");
        getChildren().add(browser);
            }
        }
1 4

1 ответ:

Здесь не следует использовать стандартную аутентификацию файлов cookie Java EE, поскольку ваш клиент является настольным приложением.

Вы можете использовать решение для проверки подлинности токенов. Ниже приводится руководство.

  1. Login servlet: этот сервлет проверяет имя пользователя и пароль. Если проверка прошла успешно, сервлет вернет маркер, содержащий идентификатор пользователя, роли, истекает срок действия ... и т.д. Вы можете использовать формат JWT (JSON Web Token). Токен будет сгенерирован / проверен сервером с использованием секрета ключ.

  2. Сцена входа в систему-JavaFX: при нажатии кнопки входа в систему приложение отправит запрос на вход в сервлет входа. При успешном входе в систему приложение получит маркер и сохранит его в секретном хранилище для последующего использования. В памяти должно быть все в порядке.

  3. Для последующих HTTP-запросов (JavaFX): приложение должно повторно отправить маркер (через заголовок и т. д.). Сервер проверит маркер перед вызовом фактического ресурса. Если проверка прошла успешно, запрос рассматривается как опознанный. Для проверки маркера можно использовать фильтр JavaEE.