Как аутентифицировать клиент 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 ответ:
Здесь не следует использовать стандартную аутентификацию файлов cookie Java EE, поскольку ваш клиент является настольным приложением.
Вы можете использовать решение для проверки подлинности токенов. Ниже приводится руководство.
Login servlet: этот сервлет проверяет имя пользователя и пароль. Если проверка прошла успешно, сервлет вернет маркер, содержащий идентификатор пользователя, роли, истекает срок действия ... и т.д. Вы можете использовать формат JWT (JSON Web Token). Токен будет сгенерирован / проверен сервером с использованием секрета ключ.
Сцена входа в систему-JavaFX: при нажатии кнопки входа в систему приложение отправит запрос на вход в сервлет входа. При успешном входе в систему приложение получит маркер и сохранит его в секретном хранилище для последующего использования. В памяти должно быть все в порядке.
Для последующих HTTP-запросов (JavaFX): приложение должно повторно отправить маркер (через заголовок и т. д.). Сервер проверит маркер перед вызовом фактического ресурса. Если проверка прошла успешно, запрос рассматривается как опознанный. Для проверки маркера можно использовать фильтр JavaEE.