如何在 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()
我有一个带有登录屏幕的应用程序,在用户通过身份验证后,一些 "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()