在安装过程中保存Java应用程序的属性
我创建了一个基本上是MySQL数据库接口的Java应用程序。它有助于组织和跟踪数据。我们在工作场所使用它,没有任何问题 - 我已经将它从Eclipse中导出为jar文件,并将所有jar文件复制给每个人。在安装过程中保存Java应用程序的属性
现在我们想让这个软件可用于其他工作场所。问题是数据库的URL,用户名和密码在应用程序中被硬编码。我想为它创建一个设置过程,以便有人下载它时,他们会通过一个向导下载MySQL并在任何地方设置数据库。然后该人员可以将jar文件分发给工作场所中的每个人,而无需他们进行设置,因为每个人都将访问相同的数据库。
该过程必须以某种方式保存数据库URL,用户名和密码,以便工作场所的人员可以从任何计算机运行该jar。这让我认为他们应该被保存在罐子里......是我需要的属性文件?我可以在jar中放置一个属性文件,并允许在安装过程中对其进行编辑吗?
任何指导非常感谢,我很新!
============================================== ====================================
编辑:我想我要去什么现在做的是让用户安装MySQL并自己设置他们的数据库。正如下面的答案所暗示的那样,使用这种自动化可能比它的价值更麻烦,因为我必须处理每个人的不同平台,设置数据库的偏好,安全问题等等。一旦他们这样做,他们就会下载我的jar文件。
我已经添加了一个属性文件到我的jar文件来存储数据库URL,用户名和密码。该文件最初是空的,所以当用户第一次运行jar时,程序将尝试访问属性文件,查看它是否为空,并提示用户输入此信息。然后它将从jar中提取属性文件,编辑它们的信息,并将属性文件粘贴回jar中。然后,该人应该能够将更新的jar发布给他们的同事,并且他们都应该能够打开它而不必提供该信息。我已经有这部分工作。我还将增加“重新配置”程序的能力 - 以防用户移动数据库时 - 通过调用相同的方法(他们将再次分发新版本的程序)。
接下来,我想尝试通过加密或混淆代码来以某种方式保护属性文件(虽然我认为这只适用于类文件而不适用于文本文件...)。我担心的是,工作场所的任何人都可以打开它并打开属性文件,然后使用URL,用户名和密码自行访问数据库并造成损害。理想情况下,除了程序本身之外,没有人能够解除它。
如果有人对我的方法有其他疑虑,请告诉我!
首先,在工作场所的中央位置设置数据库以便不同用户可以访问数据库并不轻松。此外,第一个用户设置它,然后将应用程序重新分发给其他用户。
回答技术问题 - 最简单的方法是先打开已知的位置,在该位置编辑属性文件,然后重新打包到新文件,或许使用特定于该工作场所的后缀。
谢谢,我会研究这个!你认为我会试图建立数据库有什么样的问题?一旦用户指定了一个位置,我认为这只是一些命令行调用。第一个用户设置并重新分配它有什么问题?如果我做了重新打击的想法,我不能让第一个用户在USB上传递新的jar,或者将它放在中心位置,以便人们可以下载它吗? – FrancesKR 2013-02-25 03:17:40
是的,这一切都有可能。由于我不知道具体的实施细节,我只是认为它可能是混乱的。祝你好运,并保持我们的发布。 – 2013-02-25 08:26:20
您可以将属性文件保存在用户主目录的子目录中,由System.getProperty("user.home)
获取。另外,请看Apache Commons Configuration library。
只有一个人的主目录是可以访问的吗?我想要一种方法来设置程序的属性,然后为相同的属性申请该工作场所中的任何人。 – FrancesKR 2013-02-25 03:12:15
看一看HSQLDB。这是一个轻量级的数据库,它很容易设置。如果它不存在,可以将它配置为db,如果它存在,则将它配置为我。但是,如果你需要类似MySQL的东西,并希望有许多用户从不同的工作站连接到它,我不建议通过安装过程下载和配置它。会有很多网络和安全问题。作为一个附注,属性文件是一个好主意。
This is a link that explains some of the security concerns to think about。此外,再仔细考虑一下,用户可能没有必要的权限来设置/配置数据库服务器。从长远来看,它可能更安全/更容易让他们设置数据库服务器并让他们将属性文件放入应用程序类路径中。
作为一个方面说明,你有没有考虑过这个Web应用程序?这可能会让事情变得更简单,人们不必下载任何内容,而且大多数用户都不会设置。
我非常致力于MySQL,因为我们已经用这种方式编写了软件,这就是我们在工作场所中设置的系统。你的意思是什么样的网络和安全问题? – FrancesKR 2013-02-25 03:14:51
当你建立一个数据库服务器时,通常有相当数量的设置来确保它所保护的数据是安全的,特别是当你必须打开任何计算机时,它将以某种形式为其他用户访问。我用一个可以解释一些原因的链接更新了我的答案 – 2013-02-25 14:28:35
你如何部署你的应用程序?如果您使用的是Webstart,您可以在您的jnlp-File中定义您的属性并使用System.getProperties(...)访问它们;
我的应用程序只是一个可执行的jar文件。这是一个非常小的项目。 – FrancesKR 2013-02-25 03:10:04
搜索谷歌和SO的“Java密码存储”,也看看http://stackoverflow.com/questions/7017688/what-is-the-best-practice-for-securely-storing-passwords-in -java – Java42 2013-02-24 01:45:48