如何在 JavaFX 桌面应用程序登录后保留用户信息

How to keep user information after login in JavaFX Desktop Application

我有一个带有登录屏幕的应用程序,在用户通过身份验证后,一些 "data" 从数据库中检索(用户名和权限),直到这里一切都很好。

登录过程后,我需要访问权限以在不同的 JavaFX 场景中生成一些菜单,这在任何时候都贯穿整个应用程序,但我不知道该怎么做。

我正在寻找的是一种行为,例如 PHP 中的 SESSION 变量(是的,我来自 web 开发),它可以在特定时间段内(通常是用户正在访问时)保持信息活跃和可访问已登录)。

我找到的有关此主题的信息不明确且已过时,我的意思是,不适用于 JavaFX 2 的解决方案或具有旧设计模式的解决方案。

我创建了一张图片,因为我在其他论坛上也发现了同样的问题,但这是被误解的,所以我希望这能有所帮助。

感谢大家。

您可以将用户数据放入本地缓存,例如Guava Cache。

可以使用JavaPreferences。第一次认证成功时,需要在Preferences中写入用户信息,如下:

Preferences userPreferences = Preferences.userRoot();
userPreferences.put(key,value);

然后从Preferences中取出数据:

Preferences userPreferences = Preferences.userRoot();
String info = userPreferences.get(key,value);

您可以使用单例设计模式。例如:

    public final class UserSession {

    private static UserSession instance;

    private String userName;
    private Set<String> privileges;

    private UserSession(String userName, Set<String> privileges) {
        this.userName = userName;
        this.privileges = privileges;
    }

    public static UserSession getInstace(String userName, Set<String> privileges) {
        if(instance == null) {
            instance = new UserSession(userName, privileges);
        }
        return instance;
    }

    public String getUserName() {
        return userName;
    }

    public Set<String> getPrivileges() {
        return privileges;
    }

    public void cleanUserSession() {
        userName = "";// or null
        privileges = new HashSet<>();// or null
    }

    @Override
    public String toString() {
        return "UserSession{" +
                "userName='" + userName + '\'' +
                ", privileges=" + privileges +
                '}';
    }
}

并在需要时使用 UserSession。当您登录时,您只需调用:UserSession.getInstace(userName, privileges) 当您注销时:UserSession.cleanUserSession()