JVM如何自动设置OS X的系统代理?

时间:2016-04-25 17:20:13

标签: java macos proxy jvm

我正在搞乱代理设置和JVM。显然,OS X(在我的案例中是Maverics)是JVM(今天的1.8_92)自动应用系统首选项中设置的任何代理的唯一系统。我测试过的任何其他系统(带有openbox的Arch Linux,没有Gnome / KDE,Windows 7,一些最新的Debian版本)都不这样做,要么必须使用' -Djava .net.useSystemProxies' (适用于Windows),或使用' -Dhttp.proxyHost = ...'明确设置代理。等

我非常确定应用OS X系统代理,因为我使用了一个特殊的标记'首选项中的代理主机名;当我更改主机名时,JVM将其代理设置更改为新的主机名(我需要重新启动JVM,但是在JVM运行时它不会改变,但是没关系)。

我发现这种行为很酷(显然,代理只是开箱即用的OS X,这在我与其他系统遇到的大量问题后令人耳目一新),但它似乎没有记录在任何地方。

有人可以确认它是OS X上的JVM吗?它在哪里发生,由谁发生?我可以想象多种实现方法:Mac的JVM可以很聪明,知道如何查找OS X的代理设置,或者只要网络设置发生变化就可以写入一些配置文件,而JVM可以简单地读取它在启动时,或者......很多选项,但它如何实际工作?

1 个答案:

答案 0 :(得分:1)

libjavaGetJavaProperties的调用是依赖于实现的; Mac OSX分享了一般的Unix实现。这用于设置任何系统属性,以便它们标记在常规Java属性上,例如文件系统的默认编码等。

MACOSX有条件地包含down the bottom,调用setProxyProperties,使用OSX标准系统配置框架执行代理查找。

一旦系统代理信息已知,它就会通过调用链传递回System.c,表示如果找到代理信息,则设置标准Java系统属性http.proxyPort等。

所以调用堆栈是:

  • Java_java_lang_System_initProperties
  • GetJavaProperties
  • setProxyProperties
  • SCDynamicStoreCopyProxies< - OSX特定电话

如果以上内容返回,则PUTPROP方法中的initProperties后跟。