2013-02-24 71 views
0

我創建了一個基本上是MySQL數據庫接口的Java應用程序。它有助於組織和跟蹤數據。我們在工作場所使用它,沒有任何問題 - 我已經將它從Eclipse中導出爲jar文件,並將所有jar文件複製給每個人。在安裝過程中保存Java應用程序的屬性

現在我們想讓這個軟件可用於其他工作場所。問題是數據庫的URL,用戶名和密碼在應用程序中被硬編碼。我想爲它創建一個設置過程,以便有人下載它時,他們會通過一個嚮導下載MySQL並在任何地方設置數據庫。然後該人員可以將jar文件分發給工作場所中的每個人,而無需他們進行設置,因爲每個人都將訪問相同的數據庫。

該過程必須以某種方式保存數據庫URL,用戶名和密碼,以便工作場所的人員可以從任何計算機運行該jar。這讓我認爲他們應該被保存在罐子裏......是我需要的屬性文件?我可以在jar中放置一個屬性文件,並允許在安裝過程中對其進行編輯嗎?

任何指導非常感謝,我很新!

============================================== ====================================

編輯:我想我要去什麼現在做的是讓用戶安裝MySQL並自己設置他們的數據庫。正如下面的答案所暗示的那樣,使用這種自動化可能比它的價值更麻煩,因爲我必須處理每個人的不同平臺,設置數據庫的偏好,安全問題等等。一旦他們這樣做,他們就會下載我的jar文件。

我已經添加了一個屬性文件到我的jar文件來存儲數據庫URL,用戶名和密碼。該文件最初是空的,所以當用戶第一次運行jar時,程序將嘗試訪問屬性文件,查看它是否爲空,並提示用戶輸入此信息。然後它將從jar中提取屬性文件,編輯它們的信息,並將屬性文件粘貼回jar中。然後,該人應該能夠將更新的jar發佈給他們的同事,並且他們都應該能夠打開它而不必提供該信息。我已經有這部分工作。我還將增加「重新配置」程序的能力 - 以防用戶移動數據庫時 - 通過調用相同的方法(他們將再次分發新版本的程序)。

接下來,我想嘗試通過加密或混淆代碼來以某種方式保護屬性文件(雖然我認爲這隻適用於類文件而不適用於文本文件...)。我擔心的是,工作場所的任何人都可以打開它並打開屬性文件,然後使用URL,用戶名和密碼自行訪問數據庫並造成損害。理想情況下,除了程序本身之外,沒有人能夠解除它。

如果有人對我的方法有其他疑慮,請告訴我!

+0

搜索谷歌和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

回答

0

首先,在工作場所的中央位置設置數據庫以便不同用戶可以訪問數據庫並不輕鬆。此外,第一個用戶設置它,然後將應用程序重新分發給其他用戶。

回答技術問題 - 最簡單的方法是先打開已知的位置,在該位置編輯屬性文件,然後重新打包到新文件,或許使用特定於該工作場所的後綴。

+0

謝謝,我會研究這個!你認爲我會試圖建立數據庫有什麼樣的問題?一旦用戶指定了一個位置,我認爲這只是一些命令行調用。第一個用戶設置並重新分配它有什麼問題?如果我做了重新打擊的想法,我不能讓第一個用戶在USB上傳遞新的jar,或者將它放在中心位置,以便人們可以下載它嗎? – FrancesKR 2013-02-25 03:17:40

+0

是的,這一切都有可能。由於我不知道具體的實施細節,我只是認爲它可能是混亂的。祝你好運,並保持我們的發佈。 – 2013-02-25 08:26:20

0

您可以將屬性文件保存在用戶主目錄的子目錄中,由System.getProperty("user.home)獲取。另外,請看Apache Commons Configuration library

+0

只有一個人的主目錄是可以訪問的嗎?我想要一種方法來設置程序的屬性,然後爲相同的屬性申請該工作場所中的任何人。 – FrancesKR 2013-02-25 03:12:15

0

看一看HSQLDB。這是一個輕量級的數據庫,它很容易設置。如果它不存在,可以將它配置爲db,如果它存在,則將它配置爲我。但是,如果你需要類似MySQL的東西,並希望有許多用戶從不同的工作站連接到它,我不建議通過安裝過程下載和配置它。會有很多網絡和安全問題。作爲一個附註,屬性文件是一個好主意。

This is a link that explains some of the security concerns to think about。此外,再仔細考慮一下,用戶可能沒有必要的權限來設置/配置數據庫服務器。從長遠來看,它可能更安全/更容易讓他們設置數據庫服務器並讓他們將屬性文件放入應用程序類路徑中。

作爲一個方面說明,你有沒有考慮過這個Web應用程序?這可能會讓事情變得更簡單,人們不必下載任何內容,而且大多數用戶都不會設置。

+0

我非常致力於MySQL,因爲我們已經用這種方式編寫了軟件,這就是我們在工作場所中設置的系統。你的意思是什麼樣的網絡和安全問題? – FrancesKR 2013-02-25 03:14:51

+0

當你建立一個數據庫服務器時,通常有相當數量的設置來確保它所保護的數據是安全的,特別是當你必須打開任何計算機時,它將以某種形式爲其他用戶訪問。我用一個可以解釋一些原因的鏈接更新了我的答案 – 2013-02-25 14:28:35

0

你如何部署你的應用程序?如果您使用的是Webstart,您可以在您的jnlp-File中定義您的屬性並使用System.getProperties(...)訪問它們;

+0

我的應用程序只是一個可執行的jar文件。這是一個非常小的項目。 – FrancesKR 2013-02-25 03:10:04

相關問題