【问题标题】:Where should I save the JDBC connectivity details?我应该在哪里保存 JDBC 连接详细信息?
【发布时间】:2015-01-28 13:39:56
【问题描述】:

我有一个带有数据库连接的 Java Swing 程序。到目前为止,我的要求是硬编码连接细节,如下所示。

public void makeConnection() 
    {
        try
        {
             Class.forName("com.mysql.jdbc.Driver");

             con = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbName","root","");

             //System.out.println("Connection Established");
        }
        catch(Exception e)
        {
            e.printStackTrace();

        }
    }

但是,客户的 IT 人员试图通过 VPN 连接到数据库,但系统拒绝连接,很可能是因为硬编码连接。

现在,我正在寻找以客户端可以编辑的方式存储连接数据的方法。这意味着,像大多数通用程序一样,客户端决定数据库密码、端口等。他可能需要它,因为涉及到 VPN。所以我打算为客户端创建一个小对话框来输入数据库密码、用户和服务器位置。保存这些数据后,程序将读取它们并相应地进行连接。

但问题是,我在哪里保存这些?我知道我可以将它们保存在文本文件中,但这是一种不安全的方法,任何人都可以阅读它。某种硬编码不是一种选择,因为客户应该能够编辑他的密码等。

有什么建议吗?

【问题讨论】:

  • 嗯...您可以散列数据库凭据并将它们保存到属性文件。
  • java.util.prefs.preferences,正如他可能的 duplicate 所建议的那样。
  • @trashgod:我从未使用过它。那么,请多解释一下?
  • @trashgod:是不是就像一本打开的书,任何人都可以来、读、走?
  • 我已经在下面详细说明了。

标签: java database swing jdbc io


【解决方案1】:

您可以使用java.util.prefs.Preferences(建议here)或javax.jnlp.PersistenceService(建议here)存储连接详细信息。尽管平台通常会保护此类数据免遭随意窥探,但您可以使用here 所示的一种方法存储加盐哈希。

【讨论】:

  • 实际上这对我不起作用.. java.util.preferences 会生成像 run: Dec 02, 2014 4:39:14 PM java.util.prefs.WindowsPreferences <init> WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5. 这样的错误
  • Windows 将设置存储在注册表中,如 here 所述。作为参考,引用了一个适用于 Windows 的完整示例here
  • 仅供参考,这在 Mac 和 Linux 中是否可以正常工作?
  • 每个平台使用不同的策略,但我在 Mac OS X 6/9、Ubuntu 12/14 或 Windows XP/7 上没有遇到任何问题。另请参阅Encrypted Preferences in Java
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-13
  • 2013-12-15
  • 2011-11-12
相关资源
最近更新 更多