【发布时间】: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