Intersult HTTP

Das Intersult HTTP sind Streaming-Handler für das Java URL-Handling mit NTLM-Unterstützung und arbeitet mit allen Betriebssystemen zusammen. Es kann aus dem Intersult Maven Repository bezogen werden, ist daher mit Maven kompatibel.

Hintergrund#

Die normalen Java Streaming-Handler für HTTP- und HTTPS-URLs handeln die Authentifizierung bei Proxy oder Server unter Windows selbst ab.

Allerdings hat der Benutzer hat keine Möglichkeit zum Eingreifen. Entweder die eingebauten Methoden zur Authentifizierung sind ausreichend für den benötigten Zweck, oder der Handler schlägt fehl mit der maximalen Anzahl von Redirects.

Des Weiteren funktioniert das transparente NTLM nur unter Windows, wenn der entsprechende Account auf der Maschine verfügbar ist. Soll ein anderer Account verwendet werden oder man benutzt ein anderes Betriebssystem, schläft das transparente NTLM fehl.

Das Intersult HTTP stellt Streaming-Handler zur Verfügung, die ohne diese Automatisierungen arbeiten. Protokolle zur Authentifizierung können dadurch darauf aufbauen, wie das bereits verfügbare NTLM.

Anwendung#

Intersult HTTP enthält mehrere Handler, der NtlmHandler dürfte der interessanteste davon sein. Jedoch können auch die HTTP- und HTTPS-Handler verwendet werden, um eine direktere HTTP-Verbindung herzustellen, ohne die üblichen Authentifizierungsversuche.

NTLM#

Das NTLM wird durch einen eigenen Handler verwendet:
	NtlmHandler handler = new NtlmHandler();
	handler.setUsername("domain\\username");
	handler.setPassword("password");
	URL url = new URL(null, urlString, handler);
	URLConnection connection = url.openConnection();
	...

Der NtlmHandler kapselt einen anderen Handler, hier wird per Default der Intersult HTTP/HTTPS-Handler verwendet, weil der normale Java-Handler die Authentifizierung abfangen und seinerseits verarbeiten würde. Falls kein transparantes NTLM zur Verfügung steht, würde dies sonst fehlschlagen.

Die Authentication kann auch durch den Default-Authenticator gesetzt werden:

	Authenticator.setDefault(new Authenticator() {
		@Override
		protected PasswordAuthentication getPasswordAuthentication() {
			return new PasswordAuthentication("domain\\username", "password".toCharArray());
		}
	});

URL mit Intersult HTTP#

Es kann eine URL konstruiert werden, die das Intersult HTTP verwendet (andere URLs sind davon nicht betroffen):
	URLStreamHandler handler = new com.intersult.net.http.Handler();
	URL url = new URL(null, urlString, handler);
	URLConnection connection = url.openConnection();
	...

HTTPS#

Der Handler befindet sich in einem anderen Package (.https. statt .http.):
	URLStreamHandler handler = new com.intersult.net.https.Handler();
	URL url = new URL(null, urlString, handler);
	URLConnection connection = url.openConnection();
	...

Genereller Austausch der Handler#

Es ist möglich, die Protokolle im System zu registrieren:
	Protocols.register();

Dabei ist zu beachten, dass jede URL-Verbindung mit den Intersult HTTP Protokollen betrieben werden. Möglicher Weise möchte man noch die Standard Protokolle verwenden. Dies ist weiterhin möglich, indem ein URL mit dem Standard-Handler konstruiert wird:

	URLStreamHandler handler = new com.sun.net.ssl.internal.www.protocol.https.Handler();
	URL url = new URL(null, urlString, handler);
	URLConnection connection = url.openConnection();
	...

Request Method#

Die standard HttpURLConnection hat fest die Request Methods GET, POST, HEAD, OPTIONS, PUT, DELETE und TRACE eingebaut. Das Verwenden einer anderen Method ist nicht möglich.

Die Intersult HttpURLConnection nimmt beliebige Request Methods bis zu einer Länge von 256 Zeichen an. Sie kann damit auch als Grundlage für SVN- oder DAV-Anfragen genutzt werden.

Hintergründe#

Der NtlmHandler kapselt einen anderen URLStreamHandler, hier wird per Default der Intersult HTTP/HTTPS-Handler verwendet, im Konstruktor kann jedoch ein anderer Handler übergeben werden.

Der normale Java-Handler kann nicht verwendet werden, da er die Authentifizierung abfängt und seinerseits verarbeiten. Falls kein transparantes NTLM zur Verfügung steht, würde dies sonst fehlschlagen.