Java Web Start:无法通过代理建立隧道,因为 Java 8 更新 111

Java Web Start: Unable to tunnel through proxy since Java 8 Update 111

自从 Java 8 Update 111 以来,我们的一些客户无法再 运行 我们的 Java Web Start 客户端。他们得到:

java.io.IOException: Unable to tunnel through proxy. Proxy returns "HTTP/1.1 407 Proxy Authentication Required

看起来和这个有关change:

Now, proxies requiring Basic authentication when setting up a tunnel for HTTPS will no longer succeed by default. If required, this authentication scheme can be reactivated by removing Basic from the jdk.http.auth.tunneling.disabledSchemes networking property, or by setting a system property of the same name to "" ( empty ) on the command line.

如果客户不愿意更改他们的代理验证方式,有什么办法吗?

注:在JNLP的<resources>中添加<property name="jdk.http.auth.tunneling.disabledSchemes" value=""/>没有效果。这是因为这种方式只支持少数属性(this page 底部附近有一个列表)。 "jdk.http.auth.tunneling.disabledSchemes"不在其中。

我发现有一种方法,但不在开发人员手中:用户可以添加

-Djdk.http.auth.tunneling.disabledSchemes=""

for Java 8 in Java 控制面板 → Java → 查看... → 运行时参数

对于 Java 9 在 Java 控制面板 → 桌面设置 → 运行时参数

除了 mbee 的答案之外,还可以在 jre 的 net.properties 文件中进行配置:

C:\Program Files (x86)\Java\jre1.8.0_131\lib\net.properties

目前需要注释掉最后100行:

之前:

 #jdk.http.auth.proxying.disabledSchemes=
 jdk.http.auth.tunneling.disabledSchemes=Basic

之后:

 #jdk.http.auth.proxying.disabledSchemes=
 #jdk.http.auth.tunneling.disabledSchemes=Basic

请注意,在 Java 更新后需要重复这两个答案,尽管 Java 自动更新已通过基本 Internet 代理身份验证停用。

如果您需要在运行时执行此操作,您可以通过添加

来设置 jdk.http.auth.proxying.disabledSchemes 属性 的值
System.setProperty("jdk.http.auth.tunneling.disabledSchemes", "");

到应用程序的主要方法。

我在 Apache Tomcat 上尝试通过使用 BASIC-Authentification 的代理服务器访问外部 SOAP Web 服务时也遇到了这个问题。

在应用程序初始化期间以编程方式设置 属性 (System.setProperty("jdk.http.auth.tunneling.disabledSchemes", "");) did不工作。它必须在 [JRE_HOME]\lib\net.properties.

中设置为 VM-Argument 或(当然不是很好的方式 :))