什么是存储登录信息的安全方式?我有一个swing应用程序,要求用户登录到当前登录的在线帐户,但我希望能够将用户登录信息存储在他们的计算机上。我有几种方法可以做到这一点:
最好的方法是什么? Java是否内置了一些内容来实现这一目标?
答案 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
}
}
}