Java Proxy Authentication

Tengo una aplicación web Java, que se ejecuta en Tomcat 6, que carga fuentes RSS desde URL remotas.

Yo sueloRom para manejar los canales RSS y los diferentes formatos para mí. La parte de conexión se ve así:

try{
  feedSource = new URL(rssObject.getAsset());
}catch(MalformedURLException mue){
  logger.error(...);
  throw mue;
}

try{
    URLConnection connection = feedSource.openConnection();
    feed = new SyndFeedInput().build(new XmlReader(connection));
}catch(Exception){handle...}

El código funciona bien, excepto en este nuevo cliente, donde usan un proxy.

Para usar el proxy, configuro las propiedades del sistema http.proxyHost y proxyPort:

System.setProperty("http.proxyHost", proxyHost);
System.setProperty("http.proxyPort", proxyPort);
System.setProperty("https.proxyHost", proxyHost);
System.setProperty("https.proxyPort", proxyPort);

HTTP GET está hecho para el proxy bien, pero ahora recibo un error HTTP 502 (puerta de enlace incorrecta o algo similar).

Analizando el intercambio HTTP con Wireshark, noté que el proxy requiere autenticación. Envía un HTTP 507. Java de alguna manera está intentando autenticarse pero usa el nombre de usuario y las contraseñas incorrectos. Parece usar el nombre de host como nombre de usuario, en cuanto a la contraseña que no conozco.

Así que traté de implementar el método Autenticador para especificar un nombre de usuario + contraseña:

Authenticator.setDefault(new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                logger.info(MessageFormat.format("Generating PasswordAuthentitcation for proxy authentication, using username={0} and password={1}.", username, password));
                return new PasswordAuthentication(username, password.toCharArray());
            }
        });

Ahora mi problema es que se ignora. El método getPasswordAuthentication nunca se llama. No veo la declaración de registro en el archivo de registro y al usar Wireshark puedo ver que todavía usa el nombre de host como nombre de usuario.

Por qué ? Parece que Java de alguna manera intenta autenticarse por sí solo sin consultar al Autenticador.

El proxy parece ser un dispositivo de MS que utiliza NTLM para la autenticación. ¿Hay algún mecanismo incorporado en Java para manejar esto? La máquina en la que se ejecuta la aplicación es Win Server 2008 R2.

Respuestas a la pregunta(2)

Su respuesta a la pregunta