什么是存储登录信息的安全方式?我有一个 Swing 应用程序,要求用户登录到一个在线帐户,目前正在登录作品,但如果可能的话,我希望能够将用户登录信息存储在他们的计算机上。我想到了几种方法来做到这一点:
- 将登录信息保存在文件中
- 将登录信息保存在数据库中
做这个的最好方式是什么?Java是否有内置的东西来做到这一点?
由于您的应用程序正在运行,您可以将登录信息保存在一个文件中,但以加密形式。使用数据库没有意义,因为您不想在将部署应用程序的位置安装数据库。
如果您的应用程序已经从用户计算机上的数据库中访问数据,则首选将用户的凭据保存在数据库中,而不是将其保存在文件中。
如果您的意思是用户名信息 - 将其存储在数据库中没有问题。
如果您的意思是密码,通常它不会在任何地方以纯格式存储。
存储的是它的哈希值(被认为不可能返回密码),由一些(更好 - 旧证明)算法生成。
当有人尝试登录时,系统会获取输入的密码,将其转换为哈希(使用相同的算法)并与数据库中的内容(或其他地方)进行比较。
我决定使用 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
}
}
}