如何在我的应用程序中传递当前登录的用户信息

时间:2019-07-06 08:50:51

标签: java swing jframe

我是编程和Java的新手,并且正在使用SQL和UI(Jframes)在JAVA中构建小型应用程序

在用户输入用户名和密码后,在登录框中,我执行一个SQL选择查询以在USER表中搜索该用户。如果查询返回1个单行,则将触发登录按钮事件处理程序,并创建下一帧的对象。

几帧以后,我有一个SQL插入活动,在这里我还必须插入发起插入操作的人(当前登录的用户)的USER_ID。

在一系列框架类之间传递此信息的最佳实践是什么?

我最初的想法是将user_id作为参数传递给对象,以便在每个框架类的构造函数中对其进行设置。但是问题不是我的所有相框都真正需要此数据。仅涉及插入的最后一帧需要用户ID。但是为了到达那个帧,我必须通过所有其他帧。 这似乎不是一个好习惯。

1 个答案:

答案 0 :(得分:1)

第一种方法

我想到的第一种可能性是使用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。有关详细信息,请参见Preferences 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
        ...
    }
}

此外,由于您想存储敏感信息,因此加密存储将很有用。有关使用加密的首选项的信息,请参见this文章。