我有一个带登录屏幕的应用程序,在用户通过身份验证后,从数据库中检索到一些“数据”(用户名和权限),直到此处一切正常。
在登录过程之后,我需要访问权限以在不同的JavaFX场景中生成一些菜单,这在整个应用程序中随时都可以,但我不知道该怎么做。
我正在寻找的是一种行为,例如PHP中的SESSION变量(是的,我来自web开发),它在一段时间内保持信息的存活和可访问性(通常在用户登录时)。
我发现的有关此主题的信息不清楚且过时,我的意思是,解决方案不适用于JavaFX 2或具有旧设计模式的解决方案。
我创建了一个图片,因为在其他论坛中我发现了同样的问题但却被误解了,所以我希望这会有所帮助。
感谢大家。
答案 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);