2009-08-12 2 views
2

Wir verwenden 2 ähnliche Microsoft ISA Proxy Server 2003, um eine Verbindung zum Internet herzustellen. Jeder Proxy hat verschiedene Login-Stil, wie unten:J2SE Proxy Authentifizierung

Server-1: nt-domain \ alan Server-2: [email protected]

Logon in IE, Firefox und meine Phonecell über Wifi Allen geht es gut. Aber ein Problem erscheint, wenn wir eine Java-Anwendung J2SE Ver 4, 5 und 6, , wo es Internet-Authentifizierung benötigt. Anmeldung an Server-2 ist OK, aber FAIL für Server-2 (style: [email protected]).

Hinweis: Beide Proxy verwenden die Windows-Authentifizierung zu sehen, geben Sie: aushandeln NTLM

appreceate wenn Sie helfen können oder für jede vorschlagen.

Danke,

Alan L

+0

Dieses auf ServerFault gehört (http://serverfault.com) – ChssPly76

Antwort

0

Sind Sie eine Anwendung oder ein Applet ausgeführt wird? Ein Applet kann auf den Proxy-Authentifizierungsmechanismus des Browsers zurückgreifen.

Ich würde vorschlagen, cURL zu verwenden, um zuerst durch Ihren Proxy zu verbinden und den Handshake zu sehen, der auftritt. Der Proxy-Server bietet dem Client eine Liste von Authentifizierungsmethoden an.

Wenn der Benutzer und das Kennwort festgelegt sind, können Sie den Header manchmal einfach aus Ihrer Browsersitzung entfernen und in Ihrem Code verwenden. Zum Beispiel kann ich diesen Header auf eine Anforderung hinzufügen, und der Proxy wird mich sehen, wie authentifiziert:

Proxy-Authorization: Basic AbCdEfGhOjk== 
3

Die java documentation beschreibt, wie die NTLM-Authentifizierung in Java aktivieren. Wenn Sie Zugriff auf Quelle haben, können Sie programmatisch Systemeigenschaften hinzufügen, wie in "proxy" Artikel beschrieben, das Hinzufügen etwas wie folgt (siehe auch discussion von axis2):

System.setProperty("http.auth.ntlm.domain", mydomain); 

Wenn Sie keinen Zugriff auf Quelle haben, können Sie Eigenschaften festlegen auf der Kommandozeile, die Ihren Java-binary startet, das Hinzufügen so etwas wie:

java -DproxyHost=host -DproxyPort=8080 -Dhttp.auth.ntlm.domain=mydomain ... 
2

Es gibt einige gute Bibliotheken, die Sie über dieses Problem erhalten helfen können. Proxy Vole (automatische Erkennung von Netzwerk-Proxy für Java) kann Ihnen helfen, die gleichen Proxy-Einstellungen wie Internet Explorer für die Authentifizierung über den Proxy zu verwenden.

Um eine Netzwerkverbindung für Ihre Java-Anwendung bereitzustellen, können Sie die Proxy-Vole-Bibliothek verwenden. Es bietet einige Strategien zur automatischen Erkennung der aktuellen Proxy-Einstellungen. Es gibt viele konfigurierbare Strategien zur Auswahl. Momentan unterstützt Proxy - Vole die folgenden Proxy - Erkennungsstrategien.

  • lesen Plattform-Einstellungen (unterstützt: Windows, KDE, Gnome)
  • lesen Browser-Einstellung (unterstützt: Firefox 3.x, Internet Explorer)
  • lesen Umgebungsvariablen (oft Variablen auf Linux/Unix-Server-Systeme)
  • Automatische Erkennung Skript von WPAD/PAC (Es werden nur einige Funktionen unterstützt)
+0

Projekt hat hier bewegt: http://code.google.com/p/proxy-vole/ –

+0

Dank Casey, ich habe den Link auf die von dir erwähnte Adresse aktualisiert – BenM

0

Mit Apache- mit Commons httpClient (Version 3), ich habe den folgenden Code. Es ist nicht gut getestet (wenn es überhaupt ist), aber ich denke, es funktioniert einmal .. :) Dies ist für den Fall, dass Sie die Programme ändern können .. wenn sie einige Pakete von Drittanbietern sind, nichts, was Sie tun können.


String proxyHost = System.getProperty("https.proxyHost"); 
       int proxyPort = 0; 
       try { 
        proxyPort = Integer.parseInt(System 
          .getProperty("https.proxyPort")); 
       } catch (Exception ex) { 
        // 
       }

  System.setProperty("java.net.useSystemProxies", "true"); 

      ProxySelector ps = ProxySelector.getDefault(); 
      List<Proxy> proxyList = ps.select(new URI(targetUrl)); 
      Proxy proxy = proxyList.get(0); 
      if (proxy != null) { 
       InetSocketAddress addr = ((InetSocketAddress) proxy 
         .address()); 
       if (addr != null) { 
        proxyHost = addr.getHostName(); 
        proxyPort = addr.getPort(); 
       } 
      } 

      boolean useProxy = proxyHost != null && proxyHost.length() > 0; 

      if (useProxy) { 
       httpClient.getHostConfiguration().setProxy(proxyHost, 
         proxyPort); 
      } 

Verwandte Themen