簡體   English   中英

如何在我的應用程序中傳遞當前登錄的用戶信息

[英]How do I pass current logged in user information across my application

我是編程和Java的新手,並使用SQL和UI(Jframes)在JAVA中構建小型應用程序

在用戶輸入用戶名和密碼后,在登錄框架中,我執行SQL選擇查詢以在USER表中搜索該用戶。 如果查詢返回1個單行,則將觸發登錄按鈕事件處理程序,並創建下一幀的對象。

幾幀之后,我進行了一次SQL插入活動,在該活動中,我還必須插入發起插入操作的人(當前登錄的用戶)的USER_ID。

在一系列框架類中傳遞此信息的最佳實踐是什么?

我的最初想法是將user_id作為對象中的參數傳遞,以便在每個框架類的構造函數中對其進行設置。 但是問題不是我的所有相框都真正需要此數據。 僅涉及插入的最后一幀需要用戶ID。 但是為了到達那個幀,我必須通過所有其他幀。 這似乎不是一個好習慣。

第一種方法

我想到的第一種可能性是使用java.util.Properties將應用程序狀態存儲在屬性文件中。 方法是使用單例包裝器,比方說ApplicationState用於讀取/寫入屬性文件。 這個單例類可以從所有框架訪問,或者可以在構造函數內部傳遞此類的實例。

public class ApplicationState {

    private static ApplicationState instance = new ApplicationState();

    private ApplicationState() { }
    public static ApplicationState getInstance( ) { return instance; }

    public String read(String key) throws IOException {

        try (InputStream input = new FileInputStream("path/to/config.properties")) {

            Properties prop = new Properties();
            prop.load(input);
            return prop.getProperty(key);
        }
    }

    ...
}

第二種方法

然后,我意識到一個更干凈的解決方案是使用java.util.prefs.Preferences API。 有關詳細信息,請參見首選項API

class A {

    public void login() {

        Preferences prefs = Preferences.userNodeForPackage(com.mycompany.MyClass.class);

        prefs.putInt("userId", 11);
        ...
    }
}

class B {

    public void insert() {

        Preferences prefs = Preferences.userNodeForPackage(com.mycompany.MyClass.class);

        int userId = prefs.getInt("userId", 0); // 0 is default identifier
        ...
    }
}

另外,由於您要存儲敏感信息,因此加密存儲將很有用。 對於使用加密的喜好看到這個文章。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM