Authentication Abfrage trotz Authenticator

eiz

Grünschnabel
Ich möchte eine kleine Webanwendung schreiben, welche IP + Zugangsdaten erhält, diese in einem Authenticator im Servlet setzt und anschließend auf eine durch Basic Authentication geschützte Seite umleitet (sodass die Daten dann nicht mehr eingegeben werden müssen).

Ich bin noch ziemlicher Anfänger und habe mit den Klassen URL, URLConnection, Authenicator noch nicht gearbeitet, daher für jede Anregung dankbar!

Wenn im Servlet nun redirected wird, müssen die Zugangsdaten trotzdem eingegeben werden.
Woran liegt das bzw. wie benutze ich den Authenticator richtig, damit er meine Anfroderungen erfüllt?

Code:
package servlets;
 
import java.io.IOException;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import java.net.Authenticator;
import java.net.PasswordAuthentication;
import java.net.URL;
import java.net.URLConnection;
 
/**
 * Servlet implementation class Connect
 */
public class Connect extends HttpServlet
{
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Connect()
    {
        super();
    }
 
    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        final String ip = request.getParameter("ip");
        final String user = request.getParameter("user");
        final String pw = request.getParameter("pw");
        
        Authenticator.setDefault(new Authenticator() 
        { 
          protected PasswordAuthentication getPasswordAuthentication() 
          { 
            return new PasswordAuthentication(user, pw.toCharArray()); 
          } 
        } );
 
        URL url = new URL("http://" + ip + "/");
        URLConnection con = url.openConnection();
        
        response.sendRedirect("http://***IP als String***");
        
    }
}
 

deepthroat

Erfahrenes Mitglied
Hi.

Das wird so nicht funktionieren.

Das Redirect wird zum Browser gesendet, und der Browser versucht dann sich zu verbinden.

Da spielt es keine Rolle, dass du auf dem Server die Zugangsdaten im Authenticator hast...

Der Browser muß beim Basic Authentication Schema zu einem Realm das passende User/Password Paar kennen.

Gruß
 
  • Gefällt mir
Reaktionen: eiz

eiz

Grünschnabel
Wie gesagt, Anfänger, daher verstehe ich noch nicht so richtig die Zusammenhänge der Klassen, bzw. wie ich die Anwendung realisieren kann.
Denke ich denn in eine völlig falsche Richtung, oder muss/kann ich den Authenticator für die Anmeldung verwenden?

Habe schon ewig gegoogelt, aber leider nichts passendes für mich gefunden...
Hinter der Anmeldung verbirgt sich eine Seite mit einem Bild, welches ich anzeigen lassen will (und in einem nächsten Schritt aktualisieren lassen will, doch das kommt später :D ).
 

deepthroat

Erfahrenes Mitglied
Wie gesagt, Anfänger, daher verstehe ich noch nicht so richtig die Zusammenhänge der Klassen, bzw. wie ich die Anwendung realisieren kann.
Denke ich denn in eine völlig falsche Richtung, oder muss/kann ich den Authenticator für die Anmeldung verwenden?
Wie bereits erklärt nützt dir der Authenticator gar nichts.

Um Seiten auf deinem Server mit Passwort zu schützen, kannst du das in der web.xml konfigurieren. Siehe z.B. http://www.servlets.com/jservlet2/examples/ch08/index.html

Falls du das in deinem Servlet selbst machen willst, mußt du erstmal eine 401 Fehlermeldung senden damit der Browser dann die Auth. Informationen sendet. Siehe z.B. http://www.cs.bham.ac.uk/~tmw/servlet_tutorial/auth.shtml
Hinter der Anmeldung verbirgt sich eine Seite mit einem Bild, welches ich anzeigen lassen will (und in einem nächsten Schritt aktualisieren lassen will, doch das kommt später :D ).
Die Seiten befinden sich alle auf deinem Server, richtig?!

Gruß
 

eiz

Grünschnabel
Ich weiß nicht ob wir ein bisschen aneinander vorbei reden.
Ich möchte folgendes realisieren:

1. Erste HTML von mir mit Eingabeaufforderung der Zugangsdaten und IP des Ziels
2. Beim submitten der Daten Aufruf eines Servlets, welches die Basic Authentication durchführt und umleitet auf
3. zweite HTML (wieder von mir geschrieben), mit Inhalt des Ziels (in iFrame oder ähnlichem)
 

deepthroat

Erfahrenes Mitglied
Ich weiß nicht ob wir ein bisschen aneinander vorbei reden.
Das mag daran liegen, dass du dein Problem nicht so ganz klar erklärt hast.
Ich möchte folgendes realisieren:

1. Erste HTML von mir mit Eingabeaufforderung der Zugangsdaten und IP des Ziels
2. Beim submitten der Daten Aufruf eines Servlets, welches die Basic Authentication durchführt und umleitet auf
3. zweite HTML (wieder von mir geschrieben), mit Inhalt des Ziels (in iFrame oder ähnlichem)
Und das geht so nicht.

Wie bereits erklärt benötigt der Browser die Zugangsdaten wenn du ihn (durch Redirektion, mit iframe oder auf welche Weise auch immer) eine Seite laden läßt die mit Basic Authentication geschützt ist.

Es würde z.B. funktionieren, wenn dein Servlet als Proxy zwischen Browser und Zielseite fungieren würde, so dass der Browser nie direkt auf die Seite zugreifen muß.

Gruß
 
  • Gefällt mir
Reaktionen: eiz

eiz

Grünschnabel
Und wie würde ich dann den Inhalt der Zielseite darstellen?
Es handelt sich dabei um ein Bild, welches wiederum nach einer bestimmten Zeit aktualisiert werden soll.
 

eiz

Grünschnabel
Puh, das hab ich mir alles einfacher, bzw. mit meinem Wissen machbarer, vorgestellt ;)
Vielen Dank schonmal für die ganzen Antworten...

Muss ich dann im Servlet einen InputStream öffnen, welcher das Bild irgendwie "aus der Zielseite" liest?
Wie hier beschrieben: Java ist auch eine Insel
Und für die Aktualisierung: Müsste dann jedes mal das Servlet geöffnet werden, richtig?