Authentifizierung anfordern.

Technoblade

Erfahrenes Mitglied
Hi,

Ich habe mich mal schlau gemacht wie man in Java mit einem Authenticator umgeht, finde das ganze auch recht interessant. Nur was mir dabei völlig unklar geblieben ist, ist wie ich wenn ich selber z.B. mit einem ServerSocket auf eine Verbindung warte eine Authentifizierung anfordern kann? Bzw. gibt es diese Möglichkeit mit Java überhaupt?

Wenn jemand eine Antwort, bzw. ein Beispiel dafür kennt, wäre ich sehr dankbar.

MfG Technoblade
 
Hi,
du willst also, dass der Client ein Passwort braucht, um die Serverdienste nutzen zu können?
Serverseitiger-Code:
Java:
//Code zum Aufbauen der Verbindungen:
while(true){
 Socket newSocket = sercerSocket.accept();
 DataInputStream input = new DataInputStream(new Socket.getInputStream());
 String str = input.readUTF();
 if(passwordIsRight(str)){
  //Mach was du willst, z B.: zu einer Liste von Sockets hinzufügen
 }
}

Clientseitiger Code:
Java:
//Code zum Verbinden zum Server:
Socket server = new Socket("127.0.0.1", 4444);
DataOutputStream output = new DataOutputStream(socket.getOutput());
output.writeUTF("This is password");
Der Code ist nicht getestet!

Bei diesem Beispiel wirst du aber erst von einer fehlgschlagenen Anmeldung was mitbekommen, wenn du das Socket irgendwie benutzen willst. Du kannst natürlich den Server bei fehlgeschlagener Authentifizierung dem Clienten die schlechte Nachricht zurückschicken, bevor dieser in unendlichen Weite des Heaps vom Server verwschindet. Dann kann der Klient sofort darauf reagieren.

Ciao
DosCoder
 
Zuletzt bearbeitet:
Vielen dank für den Code, nur ist das leider noch nicht dass worum es mir eigentlich ging. Wenn man mit java versucht einen Stream zu öffnen der eine authentifizierung benötigt, z.B. zu dem webinterface von deinem Router, dann wird der defaultAuthenticator aufgerufen, diesen muss man selber setzen.

Beim Client sieht dass dann so aus:

Code:
import java.net.*;
import java.io.*;
class SampleAuthenticator extends Authenticator
{
    protected PasswordAuthentication getPasswordAuthentication()
    {
        System.out.println("Anfrage vom Server: " +
        getRequestingSite());
        System.out.println("Port-Nummer des Servers: " +
        getRequestingPort());
        System.out.println("Protokoll: " +
        getRequestingProtocol());
        System.out.println("Beschreibung: " +
        getRequestingPrompt());
        System.out.println("Schema: " + getRequestingScheme());
        BufferedReader in=new BufferedReader(
        new InputStreamReader(System.in));
        try
        {
            System.out.print("Geben Sie Ihren Benutzernamen ein: ");
            String UserName=in.readLine();
            System.out.print("Geben Sie Ihr Passwort ein: ");
            String Password=in.readLine();
            return new PasswordAuthentication(
            UserName, Password.toCharArray());
        }
        catch (IOException e)
        {
            System.err.println(e.toString());
            return null;
        }
    }
    public static void main(String[] args) throws IOException
    {
        // Install authenticator
        Authenticator.setDefault(new SampleAuthenticator());
        URL url=new URL("http://web.informatik.uni-bonn.de/IV/"+
        "martini/Lehre/Veranstaltungen/WS9900/InformatikI/"+
        "Folienkopien/Kapitel0.pdf");
        InputStream in=url.openStream();
        in.close();
    }
}

Quelle:Netzwerk unter Java, Uni Bonn, Seite 35

Meine Frage war jetzt wie ich selber so eine Authentifizierung anfordern kann.
 
Zuletzt bearbeitet:
Zurück