Java Authentification Du Proxy

J'ai un Java webapp, l'exécution de Tomcat 6, qui se charge des flux RSS à partir d'une Url distante.

- Je utiliser Rome pour gérer les flux RSS et des formats différents pour moi. La connexion de la partie ressemble à ça :

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...}

Le code fonctionne très bien, sauf à ce nouveau client, où qu'ils utilisent un proxy.

Pour utiliser le proxy, j'ai mis le http.proxyHost et proxyPort propriétés système :

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

HTTP GET est fait pour le proxy va bien, mais maintenant j'ai un HTTP erreur 502 (bad gateway ou quelque chose de similaire).

L'analyse de la HTTP échange avec Wireshark, j'ai remarqué que le serveur proxy exige une authentification. Il envoie un HTTP 507. Java est en quelque sorte essayer de s'authentifier, mais il utilise le mauvais nom d'utilisateur et mots de passe. Il semble qu'il utilise le nom d'hôte pour le nom d'utilisateur que pour le mot de passe je ne sais pas.

J'ai donc essayé de mettre en œuvre l'Authentificateur méthode de spécification d'un nom d'utilisateur+mot de passe :

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());
            }
        });

Maintenant, mon problème, c'est qu'il est ignoré. Le getPasswordAuthentication méthode n'est jamais appelé. Je ne vois pas l'enregistrement de déclaration dans le fichier journal et à l'aide de Wireshark, je peux voir qu'il utilise toujours le nom de l'hôte nom d'utilisateur.

Pourquoi ? Il semble que java en quelque sorte essaie de s'authentifier par lui-même, sans consulter l'Authentificateur.

Le proxy semble être un MME appareil qui utilise l'authentification NTLM pour l'authentification. Est-il un mécanisme intégré dans java pour gérer cela ? La machine sur laquelle l'application s'exécute est Win Server 2008 R2.

InformationsquelleAutor Pierre Henry | 2011-12-29