【问题标题】:Java JDBC Connection using Socks使用 Socks 的 Java JDBC 连接
【发布时间】:2018-06-15 18:29:28
【问题描述】:

使用 Java,我需要使用 JDBC 连接到 SQL Server 数据库。我需要通过我们公司的 SOCKS 代理,所以我这样做了,它似乎可以工作。

Connection conn = null;

Properties systemProperties = System.getProperties();
systemProperties.setProperty("socksProxyHost","socksproxy.domain.com");
systemProperties.setProperty("socksProxyPort","1081");

connectionUrl = "jdbc:sqlserver://1.2.3.4:60304;databaseName=myDatabase;sslProtocol=TLSv1.2;";
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
conn = DriverManager.getConnection(connectionUrl,"MyLogin","MyPassword");

但是,我开始看到一些奇怪的东西。该代码在带有许多其他应用程序的 JVM 中的 websphere 中运行。

经过一些测试,似乎更改属性实际上会影响整个 JVM。其他连接(LDAP、DB 连接)也在尝试使用我定义的 SOCKS 代理。

还有其他方法可以强制我的 JDBC 连接通过非全局的袜子吗?

【问题讨论】:

  • 您的问题的答案取决于读取这些系统属性的内容,以及该代码是否能够从System.getProperty()以外的任何地方读取属性
  • 当然它们会影响整个JVM。这就是他们的目的。它们由java.net.Socket 阅读。 @AndyGuibert
  • 我更新了代码块以包含 jdbc 连接代码。我使用的驱动程序是 mssql-jdbc-6.4.0.jre8.jar。除了系统属性还有其他方法可以让jdbc连接使用socks吗?
  • 根据在线码头docs.oracle.com/javase/8/docs/technotes/guides/net/proxies.html 使用 System.setProperty 设置代理时,它的“全有或全无”意味着它将根据您设置的属性将 JVM 设置为使用所有连接。

标签: java jdbc proxy websphere socks


【解决方案1】:

不是最好的解决方案,但我最终创建了一个独特的 JVM 来设置代理主机和端口。我会将该 JVM 用于任何需要连接到外部数据库的功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 2011-01-11
    • 2014-09-29
    • 1970-01-01
    • 1970-01-01
    • 2019-12-02
    • 2015-02-18
    相关资源
    最近更新 更多