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 或(当然不是很好的方式 :))
自从 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 或(当然不是很好的方式 :))