我正在尝试连接到使用SSL的网站。此连接是通过代理(squid),也需要代理身份验证。
我目前正在使用HttpsUrlConnection进行应用程序内的连接,如果可能的话,我希望继续使用它。
使用connection.open(“https://domain.com”)建立连接时出现问题,在您有机会设置任何标头(包括“代理验证”)之前立即发送HTTP CONNECT普通的http连接在调用getOutputStream之前不会发送任何内容,因此只需设置此标头即可。
可以为此设置defaultAuthenticator,返回正确的名称和密码。但是有两个问题:
该应用程序是在具有未知其他应用程序的Web服务器内运行的Web应用程序。如果我设置了默认身份验证器,这会影响其他应用程序吗? (出于同样的原因设置系统属性)
我还需要能够在不同的连接中使用不同的代理。例如我可能有一个连接到proxy1.domain.com,另一个连接到proxy2.domain.com,每个都有不同的凭据。
实现这一目标的正确方法是什么?如果HttpUrlConnection无法广泛使用,我会感到非常惊讶。
答案 0 :(得分:1)
如果我没有完全弄错,使用JVM URLConnection
和朋友无法实现。此外,鉴于其在严重错误和内存泄漏方面的记录,它已经在我们公司的黑名单上停留了相当长的一段时间。
至于你的问题1,一般每个ClassLoader
都有自己的类副本和类静态成员。因为,Authenticator
是一个JVM类,我认为它是由你的应用程序ClassLoader
的父ClassLoader
加载的(一个),它确保只有Authenticator
的一个副本JVM中的 class 。
答案 1 :(得分:0)
您设置了java.net.Authenticator
。