In der Klasse URLConnection stellt Java alle zur Durchführung der HTTP-Authentifizierung erforderlichen Teile zur Verfügung. Nachdem die Verbindung für den Server geöffnet wurde (nach Aufruf der Methode connect), hat man mit der Methode getHeaderField(String) Zugriff auf einen Header, der den Wert des Headers als Zeichenfolge unter Angabe des Namens zurückgibt.
So kann man nach dem Senden eines Requests mit der Methode getHeaderField den WWW-Authenticate-Header erhalten. Wenn die Methode Null zurückgibt, gibt es keinen Header und der Request bedarf keiner Autorisierung. Andernfalls erhält man durch Parsen des zurückgegebenen Werts den Realm und erhält mit diesem Benutzernamen und Passwort. Nun wird der Request wieder gesendet, dieses Mal mit der Methode setRequestProperty zum Setzen des Authorization-Header.
Dieser Vorgang kann so lange wiederholt werden, bis entweder die Autorisierung erteilt oder der Vorgang durch den Anwender abgebrochen wird. Benutzername und Passwort können für die Autorisierung künftiger Requests innerhalb des gleichen Realm gespeichert werden. Nach den HTTP-Authentifizierungsspezifikationen sind sämtliche Requests an den gleichen Pfad auf der gleichen oder tieferen Ebene als Teil des gleichen Realm anzusehen.
Wenn auch die normalen Java-Klassen keine Unterstützung von Base64 bieten, so ist die Implementierung von Base63 nicht schwierig. Wie in Listing A ersichtlich, gibt es einige allgemein zugängliche Implementierungsteile.
Die Autorisierung für einen Proxy kann auf die gleiche Weise gesetzt werden. Hierzu benutzt man einfach die Methode setRequestProperty, um den Proxy-Authorization-Header für jeden Request festzulegen.
Um HTTP-Authentifizierung leichter zu Java-Anwendungen hinzufügen zu können, habe ich die Klasse HttpGet (Listing B) geschrieben, die auch Proxies unterstützt. Siehe Tabelle A für das gesamte API.
Tabelle A
Methode | Beschreibung |
removeAuthorization | Entfernt die zuvor für einen bestimmten Host und Realm gesetzte Autorisierung |
setAuthorization | Setzt Benutzernamen und Passwort für die Autorisierung zukünftiger Requests an einen bestimmten Host und Realm |
setProxy | Setzt den für Requests zu verwendenden Proxy |
setProxyAuthorization | Setzt Benutzernamen und Passwort zur Verwendung beim Proxy |
doGet | Führt ein HTTP GET Request an eine bestimmte URL aus und gibt Verbindungsobjekt URLConnection zurück; fordert ggf. den Anwender zur Eingabe von Benutzernamen und Passwort auf für den Zugriff auf geschützte Ressourcen |
Die wichtigste Methode ist doGet – diese führt einen HTTP GET Request auf einer URL aus und gibt ein verbundenes URLConnection-Objekt zurück. Mit der Methode authorize erhält es Benutzernamen und Passwort für einen bestimmten Realm. In der Standardimplementierung wird ein Dialogfeld angezeigt, in dem diese Informationen einzugeben sind. Mit der Unterklasse HttpGet kann man die Methode authorize außer Kraft setzen, wenn man eine anwenderspezifische Implementierung benötigt. Autorisierungen werden zur Wiederverwendung gecached, wenn auf den gleichen Realm erneut zugegriffen wird.
Listing C zeigt ein einfaches Beispiel, das mit der Klasse HttpGet auf den Inhalt einer bestimmten URL (in der Befehlszeile) zugreift und diesen an das Standard-Ausgabegerät sendet.
Neueste Kommentare
1 Kommentar zu Java-Unterstützung für Proxies und HTTP-Authentifizierung
Kommentar hinzufügenVielen Dank für Ihren Kommentar.
Ihr Kommentar wurde gespeichert und wartet auf Moderation.
Links
Links gehen ins Leere.
Gruss