如何从java.sql.Connection对象中检索密码

时间:2011-04-12 00:23:13

标签: java mysql jdbc

我正在寻找一种从java.sql.Connection对象获取密码的方法。我知道DatabaseMetaData对象中有一个getUserName()方法,但遗憾的是没有相应的getPassword()方法。在Netbeans中使用调试器我可以看到密码的字段,所以必须有一种方法来使用反射来获取这些信息,但到目前为止我一直无法弄清楚如何。

3 个答案:

答案 0 :(得分:2)

由JDBC的实现者提供,因为用户和密码作为Map传递给Driver

知道密码是什么的一种方法是扩展驱动程序并包含它。

class CustomDriver extends ImplementerDriver {
  @Override
  public Connection connect(String url, Properties info) throws SQLException {
    super.connect(url, info);
    // Extract password from info.
  }

  public String getPassword() {

   ....
  }
}

答案 1 :(得分:1)

正如我评论的那样,唯一的方法就是查看代码。例如,对于使用最新驱动程序的MySQL(5.1.15)。你可以得到这样的密码:

public static void main(String[] args) throws Exception{
  ConnectionImpl con = (ConnectionImpl) DriverManager.getConnection("jdbc:mysql://localhost:3908/mydb?user=edalorzo&password=mandrake");

   System.out.println(con.getProperties().get("password"));

   con.close();
}

但为此,您需要了解类层次结构及其实现细节。

其他数据库很可能会有所不同。如果您的数据库是开源的,比如MySQL,您可以了解内部构造的详细信息并找到检索密码的方法。

答案 2 :(得分:0)

您可以解析连接池参数的服务器XML配置文件,并从那里获取密码。复杂的解决方案,但它的工作原理。