Java记住登录信息

时间:2013-01-21 18:07:52

标签: java swing

什么是存储登录信息的安全方式?我有一个swing应用程序,要求用户登录到当前登录的在线帐户,但我希望能够将用户登录信息存储在他们的计算机上。我有几种方法可以做到这一点:

  1. 将登录信息保存在文件中
  2. 将登录信息保存在数据库中
  3. 最好的方法是什么? Java是否内置了一些内容来实现这一目标?

4 个答案:

答案 0 :(得分:1)

如果你真的想要将登录信息存储到用户的计算机上,那么除了Daniel Kaplan所提到的之外,老式的方法是将其存储在cookie中。

其他方式是存储到Web SQL,虽然它的Javascript(HTML5)为中心,客户端支持仍然是暗淡的。

编辑 - 因为它是一个摇摆应用程序

其他更安全的方式是将其存储在SQLite中,并使用MD5加密密码

如果您真的不关心安全性,请将其存储到XML文件或Configuration Files甚至CSV文件中。

答案 1 :(得分:1)

当您的应用程序处于摆动状态时,您可以将登录信息保存在文件中,但是以加密形式保存。使用数据库没有意义,因为您不希望在部署应用程序的地方安装数据库。

如果您的应用已经从用户计算机上的数据库访问数据,则首选将用户凭据保存在数据库中,而不是将其保存在文件中。

答案 2 :(得分:0)

如果您指的是用户名信息 - 将数据存储在数据库中没有问题。

如果您指的是密码,通常不会以任何形式存储在普通表单中。

存储的内容是由某些(更好的 - 经过验证的)算法生成的哈希(被认为不可能回到密码)。

当有人尝试登录时,系统会获取输入的密码,将其转换为哈希值(使用相同的算法)并与数据库中的内容(或其他位置)进行比较。

答案 3 :(得分:0)

我决定使用Preferences API来存储和检索数据 http://docs.oracle.com/javase/7/docs/api/java/util/prefs/Preferences.html

以下是最终代码的粗略示例:

public class Login extends javax.swing.JDialog{
    // Get saved info and set the textbox text
    public Login(){
        String userName = pref.get("user", "");
        if(!userName.equals("")){
            this.user.setText(userName);
        }
        String passName = pref.get("pass", "");
        if(!passName.equals("")){
            this.pass.setText(passName);
        }
    }

    // Run on login button click
    public void login(){
        String p = new String(pass.getPassword());
        DoLogin log = new DoLogin(user.getText(), p);
        log.execute();
    }

    // Process in background
    public class DoLogin extends SwingWorker{
        public void done(){
            // On successfull login save user data
            pref.put("user", this.strUser);
            pref.put("pass", this.strPass);
        }

        public String doInBackground(){
            // Process login
        }
    }
}