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

Fer*_*deh 60 java

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

谢谢

Gio*_*sas 51

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

Java中的加密首选项

  • 我们应该在哪里存储所需的钥匙? (14认同)
  • 这里有很好的介绍教程:http://www.mkyong.com/java/java-properties-file-examples/ (6认同)

Che*_*eng 25

我通常存储在用户数据目录中,应用程序名称的子目录后跟应用程序版本.

public static String getUserDataDirectory() {
    return System.getProperty("user.home") + File.separator + ".jstock" + File.separator + getApplicationVersionString() + File.separator;
}
Run Code Online (Sandbox Code Playgroud)

我使用以下代码已有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;
} 
Run Code Online (Sandbox Code Playgroud)

  • 所以拥有你程序副本的人都可以使用任何人的密钥文件?缺乏认可并不能确保安全.密码被泄密的人可能甚至不知道这个事实.当然这是有效的,并且受适当保护的机器风险很低,但事实上加密购买的很少.实际上,您的应用程序是关键,因此需要保护的是什么. (6认同)
  • 我认为这是一个安全威胁.作为一个破解者可以通过反编译你的Java代码获得硬编码密码. (4认同)

djn*_*jna 13

安全地存储单个密码非常困难.假设您使用某个密钥加密密码.然后,当您的applciation再次启动时,它需要该密钥,它从哪里获得?

如果它询问用户,那么他也可以输入您首先存储的ftp密码.如果它从某个地方读取密钥,那么你需要保护密钥,我们回到我们开始的地方.

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

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