0

我正在使用 BindingType.Browser 开发 OpenCMIS 客户端。创建一个传递 USER、PASSWORD、BROWSER_URL、BINDING_TYPE 和 REPOSITORY_ID 所需参数的会话按预期工作。会话被创建并且可以执行进一步的步骤。

现在我想让我的客户端在使用 HTTP 代理访问互联网的机器上运行。要指定要访问的代理,我设置了系统属性 http.proxyUrl 和 http.proxyPort。只要代理不需要身份验证,这也可以工作。

嗯,这就是我现在挣扎的地方。我在测试代理中激活了身份验证,并在客户端代码中添加了参数 PROXY_USER 和 PROXY_PASSWORD 来创建会话。但这似乎不起作用。我已经调试了使用的 StandardAuthenticationProvider 来验证会发生什么。HTTP-Header“Proxy-Authenticate”是由身份验证提供程序创建的,但似乎化学框架正在发送没有该标头的请求。在我的代理日志中,收到的请求不包含任何安全标头。

CONNECT my.server.org:443 HTTP/1.1
User-Agent: Java/1.8.0_111
Host: my.server.org
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Proxy-Connection: keep-alive

有什么建议么?

4

1 回答 1

1

我在以下线程中找到了解决方案:Java Web Start: Unable to tunnel through proxy since Java 8 Update 111

自 Java 8 Update 111 起,默认情况下,在 Oracle Java 运行时中,基本身份验证方案已停用,方法是在代理 HTTPS 时将“基本”添加到jdk.http.auth.tunneling.disabledSchemes网络属性。有关详细信息,请参阅8u111 更新发行说明

要重新激活代理,您需要设置jdk.http.auth.tunneling.disabledSchemes=""。这可以在启动应用程序时通过 VM Argument 完成

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

或在运行时通过在应用程序的 main 方法中设置属性

System.setProperty("jdk.http.auth.tunneling.disabledSchemes", "");
于 2017-05-11T13:27:27.453 回答