如何在JavaFX Desktop Application中登录后保留用户信息

时间:2017-10-01 00:03:33

标签: java javafx-2 desktop-application session-storage

我有一个带登录屏幕的应用程序,在用户通过身份验证后,从数据库中检索到一些“数据”(用户名和权限),直到此处一切正常。

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

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

我发现的有关此主题的信息不清楚且过时,我的意思是,解决方案不适用于JavaFX 2或具有旧设计模式的解决方案。

我创建了一个图片,因为在其他论坛中我发现了同样的问题但却被误解了,所以我希望这会有所帮助。

感谢大家。

enter image description here

3 个答案:

答案 0 :(得分:1)

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

    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()

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您可以使用Java Preferences。在第一次成功验证时,您需要在Preferences中写下有关用户的信息,如下所示:

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

然后从Preferences

获取数据
Preferences userPreferences = Preferences.userRoot();
String info = userPreferences.get(key,value);