【问题标题】:How does JVM automatic setting of OS X's System proxies work?OS X 系统代理的 JVM 自动设置如何工作?
【发布时间】:2016-08-19 05:28:10
【问题描述】:

我在搞乱代理设置和 JVM。显然,OS X(在我的例子中是 Maveics)是唯一一个 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 可以在启动时简单地读取它,或 ... 很多选项,但它实际上是如何工作的?

【问题讨论】:

    标签: java macos proxy jvm


    【解决方案1】:

    libjava 中有对GetJavaProperties 的调用,这取决于实现; Mac OSX 共享通用的 Unix 实现。这用于设置任何系统属性,然后将它们标记在一般 Java 属性上,例如文件系统的默认编码等。

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

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

    所以调用栈是:

    • Java_java_lang_System_initProperties
    • GetJavaProperties
    • setProxyProperties
    • SCDynamicStoreCopyProxies

    如果上面返回了一些东西,则在 initProperties 方法中跟随 PUTPROP

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-28
      • 2012-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-24
      • 1970-01-01
      • 2012-06-14
      相关资源
      最近更新 更多