安全地保存Java桌面应用程序中的用户设置的最佳方法是什么?例如,如果我想保存Ftp帐户设置,那么最好的方法是什么?
由于
答案 0 :(得分:47)
Preferences API是存储用户和系统首选项的好方法。如果要存储密码,则必须对其进行加密。这是一篇很好的文章,可以帮助您入门。
答案 1 :(得分:25)
我通常存储在用户数据目录中,其中包含应用程序名称的子目录,后跟应用程序版本。
public static String getUserDataDirectory() {
return System.getProperty("user.home") + File.separator + ".jstock" + File.separator + getApplicationVersionString() + File.separator;
}
我使用以下代码已有3年了。这种方法在Windows,Linux或Mac中运行良好。
请注意,在Windows中,永远不要将其存储在Program Files
中,因为Windows Vista或更高版本中的UAC可能会给您带来很多麻烦。
请记住在应用程序名称前加一个点,这样它就会成为Linux中的隐藏文件夹。
使用这种方法的好处是,你不仅仅限制你自己存储原始值。相反,您可以使用xstream
将整个对象状态保存到磁盘例如:
public static boolean toXML(Object object, File file) {
XStream xStream = new XStream();
OutputStream outputStream = null;
Writer writer = null;
try {
outputStream = new FileOutputStream(file);
writer = new OutputStreamWriter(outputStream, Charset.forName("UTF-8"));
xStream.toXML(object, writer);
}
catch (Exception exp) {
log.error(null, exp);
return false;
}
finally {
close(writer);
close(outputStream);
}
return true;
}
答案 2 :(得分:13)
安全地存储单个密码 非常困难。假设您使用某个密钥加密密码。然后,当您的applciation再次启动时,它需要该密钥,它从哪里获得?
如果它询问用户,那么他也可以输入您首先存储的ftp密码。如果它从某个地方读取密钥,那么你需要保护密钥,我们回到我们开始的地方。
如果您要保留多个密码,那么向用户询问某个“保险库”的单个密码可能会更友好,但您会遇到处理过期密码的所有麻烦。
有些产品可用于处理这些问题,如果您有严重需要,那么您可能需要对它们进行调查。