[英]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.