web-dev-qa-db-ja.com

JavaFXデスクトップアプリケーションにログインした後、ユーザー情報を保持する方法

ログイン画面のあるアプリケーションがあります。ユーザーが認証された後、データベースから「データ」(ユーザー名と権限)が取得され、ここですべてが正常になります。

ログインプロセスの後、さまざまなJavaFXシーンでいくつかのメニューを生成するための特権にアクセスする必要があります。これは、アプリケーション全体でいつでも可能ですが、その方法がわかりません。

私が探しているのは、PHP(はい、私はWeb開発から来ています)のSESSION変数のような動作です。これは、情報を一定期間(通常はユーザーがログイン)。

このトピックに関して私が見つけた情報は不明確で時代遅れです。つまり、JavaFX 2に適用されないソリューション、または古いデザインパターンのソリューションです。

他のフォーラムでも同じ質問を見つけたのですが、それは誤解されているので、画像を作成しました。これがお役に立てば幸いです。

みんなありがとう。

enter image description here

11

シングルトンデザインパターンを使用できます。例えば:

    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()に電話します。

3
TimurJD

Java Preferencesを使用できます。最初に認証が成功したら、次のようにPreferencesにユーザーに関する情報を書き込む必要があります。

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

次に、Preferencesからデータを取得します。

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

ユーザーデータをGuavaCacheなどのローカルキャッシュに配置できます。

0
Ace.Yin