gpt4 book ai didi

authentication - 如何在 JavaEE 中验证 JavaFX 客户端

转载 作者:行者123 更新时间:2023-12-01 03:19:15 26 4
gpt4 key购买 nike

我在客户端使用 JavaFX 开发三层应用程序,在服务器端使用 JavaEE/Glassfish 和 MySQL 作为数据库管理系统。我还使用 REST 和 JSON 跨网络传输数据。

现在我尝试使用 JavaEE 安全手段配置身份验证。我在企业 bean 中使用带有注释的声明性方法,我已经配置了 Glassfish 文件领域(添加用户/组)和 glassfish-web.xml 描述符(添加组名和角色标签)。 JavaEE 教程说,如果所有需要的准备工作都完成了,那么当客户端尝试获取 protected 资源时,Glassfish 应该向客户端询问登录名/密码对。如果它是一个网络客户端,我了解它是如何工作的,但在我的情况下,它是一个桌面 JavaFX 客户端,我不明白 Glassfish 如何在桌面应用程序中询问客户端。如何使用 JavaFX-Glassfish 建立身份验证机制?

更新

如果我尝试从浏览器(Chrome、IE)调用 servlet 并且身份验证机制能够工作,则会弹出身份验证窗口。但是当我打开 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);
}
}

最佳答案

您不应在此处使用标准 Java EE cookie 身份验证,因为您的客户端是桌面应用程序。

您可以使用 Token 身份验证解决方案。下面是一个指南。

  • 登录 servlet:此 servlet 将验证用户名和密码。如果验证成功,servlet 将返回一个包含 userId、roles、expires ... 等的 token 。您可以使用 JWT (Json Web Token) 格式。 token 将由服务器使用 key 生成/验证。
  • 登录场景 - JavaFX:按下登录按钮时,应用程序将向登录 servlet 发送登录请求。如果登录成功,应用程序将收到一个 token 并将 token 保存在 secret 存储中以供以后使用。内存中应该没问题。
  • 对于后续 HTTP 请求 (JavaFX):应用程序需要重新发送 token (通过 header 等)。服务器将在调用实际资源之前验证 token 。如果验证成功,则认为请求已通过身份验证。您可以使用 JavaEE 过滤器来验证 token 。
  • 关于authentication - 如何在 JavaEE 中验证 JavaFX 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47086681/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com