Java 如何使用HttpsUrlConnection对SSL连接使用代理身份验证?

Java 如何使用HttpsUrlConnection对SSL连接使用代理身份验证?,java,http,ssl,proxy,Java,Http,Ssl,Proxy,我正在尝试连接到使用SSL的网站。此连接通过代理(squid)进行,该代理也需要代理身份验证 我目前正在应用程序中使用HttpsUrlConnection进行连接,如果可能的话,我更愿意继续使用它 当您使用connection.open(“”)建立连接时会出现问题。在您有机会设置包括“代理身份验证”在内的任何头之前,HTTP连接会立即发送,在正常HTTP连接中,在调用getOutputStream之前不会发送任何内容,因此只需设置此头即可 可以为此设置返回正确名称和密码的defaultAuthe

我正在尝试连接到使用SSL的网站。此连接通过代理(squid)进行,该代理也需要代理身份验证

我目前正在应用程序中使用HttpsUrlConnection进行连接,如果可能的话,我更愿意继续使用它

当您使用connection.open(“”)建立连接时会出现问题。在您有机会设置包括“代理身份验证”在内的任何头之前,HTTP连接会立即发送,在正常HTTP连接中,在调用getOutputStream之前不会发送任何内容,因此只需设置此头即可

可以为此设置返回正确名称和密码的defaultAuthenticator。但这有两个问题:

  • 该应用程序是在web服务器中运行的web应用程序,其中包含未知的其他应用程序。如果我设置了默认的验证器,这会影响其他应用程序吗?(出于同样的原因,设置系统属性被禁用)

  • 我还需要能够在不同的连接中使用不同的代理。e、 g.我可能有一个连接到proxy1.domain.com,另一个连接到proxy2.domain.com,每个连接都有不同的凭据


  • 实现这一目标的正确方法是什么?如果由于HttpUrlConnection的广泛使用,这对HttpUrlConnection来说是不可能的,我会非常惊讶

    如果我没有完全弄错的话,那么使用JVM
    URLConnection
    和friends就无法实现这一点。此外,考虑到它在严重缺陷和内存泄漏方面的记录,它已经在我们公司的黑名单上有相当一段时间了

    使用


    对于问题1,通常每个
    类加载器都有自己的类副本和类静态成员。因为,
    Authenticator
    是一个JVM类,我假设它是由(其中一个)加载的应用程序的父级
    ClassLoader
    ClassLoader
    ,它确保JVM中只有
    Authenticator
    类的一个副本。

    您设置了
    java.net.Authenticator

    这就是我们最终使用的方法。