Hallo,
ich schreibe an einer Anwendung, bei der der Benutzer mehrere, teilweise passwortgeschützte Verbindungen zu einer Web-Schnittstelle aufbauen kann.
Also schreibe ich einen Authenticator, der den eingegebenen Nutzernamen samt Passwort zur Verfügung stellt und setze ihn als "Default"-Authenticator.
Soweit so gut.
Der Haken an der Sache ist, dass dieses Vorgehen nur beim ersten Mal funktioniert: Wenn ich auf diese Art und Weise eine Verbindung herstelle, wird beim ersten Aufruf der Authenticator gesetzt und die Webseite angezeigt. Versuche ich danach, die Verbindung _mit dem falschen Passwort_ herzustellen, funktioniert das, weil der Authenticator nicht neu gesetzt wurde... Hier ist mein minimales Beispielprogramm:
Statt der unten angegebenen Links kann jede beliebige PW geschützte Seite aufgerufen werden. Beim ersten Mal funktioniert es (es wird keine Exception ausgegeben), beim zweiten Mal aber eben auch... Schreibe ich direkt beim ersten Aufruf ein falsches Passwort, bekomme ich die erwartete Exception, dass ich nicht authorisiert bin...
Was übersehe ich hier? Danke für die Hilfe!
Philipp
ich schreibe an einer Anwendung, bei der der Benutzer mehrere, teilweise passwortgeschützte Verbindungen zu einer Web-Schnittstelle aufbauen kann.
Also schreibe ich einen Authenticator, der den eingegebenen Nutzernamen samt Passwort zur Verfügung stellt und setze ihn als "Default"-Authenticator.
Soweit so gut.
Der Haken an der Sache ist, dass dieses Vorgehen nur beim ersten Mal funktioniert: Wenn ich auf diese Art und Weise eine Verbindung herstelle, wird beim ersten Aufruf der Authenticator gesetzt und die Webseite angezeigt. Versuche ich danach, die Verbindung _mit dem falschen Passwort_ herzustellen, funktioniert das, weil der Authenticator nicht neu gesetzt wurde... Hier ist mein minimales Beispielprogramm:
Code:
package main;
import java.net.Authenticator;
import java.net.HttpURLConnection;
import java.net.PasswordAuthentication;
import java.net.URL;
public class AuthentTest {
public AuthentTest(String urlString, final String user, final String pass) {
try {
URL url = new URL(urlString.toString());
Authenticator.setDefault(new Authenticator(){
protected PasswordAuthentication getPasswordAuthentication() {
System.out.println("Setting password");
return new PasswordAuthentication(user,
pass.toCharArray());
}
});
HttpURLConnection urlConnection =
(HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("POST");
urlConnection.setDoInput(true);
urlConnection.setDoOutput(true);
urlConnection.getInputStream();
urlConnection.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String ...args) {
new AuthentTest("http://localServer/xmla", "user", "correctPassword");
new AuthentTest("http://localServer/xmla", "user", "wrongPassword");
}
}
Statt der unten angegebenen Links kann jede beliebige PW geschützte Seite aufgerufen werden. Beim ersten Mal funktioniert es (es wird keine Exception ausgegeben), beim zweiten Mal aber eben auch... Schreibe ich direkt beim ersten Aufruf ein falsches Passwort, bekomme ich die erwartete Exception, dass ich nicht authorisiert bin...
Was übersehe ich hier? Danke für die Hilfe!
Philipp