在java应用程序中保存用户设置的最佳方法是什么?

时间:2010-09-24 06:15:53

标签: java

安全地保存Java桌面应用程序中的用户设置的最佳方法是什么?例如,如果我想保存Ftp帐户设置,那么最好的方法是什么?

由于

3 个答案:

答案 0 :(得分:47)

Preferences API是存储用户和系统首选项的好方法。如果要存储密码,则必须对其进行加密。这是一篇很好的文章,可以帮助您入门。

Encrypted Preferences in Java

答案 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密码。如果它从某个地方读取密钥,那么你需要保护密钥,我们回到我们开始的地方。

如果您要保留多个密码,那么向用户询问某个“保险库”的单个密码可能会更友好,但您会遇到处理过期密码的所有麻烦。

有些产品可用于处理这些问题,如果您有严重需要,那么您可能需要对它们进行调查。