tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
27
ZUGRIFFE
730
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    eiz eiz ist offline Mitglied
    Registriert seit
    Aug 2011
    Beiträge
    15
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    
    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***");
            
        }
    }
     

  2. #2
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    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ß
    eiz bedankt sich. 
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  3. #3
    eiz eiz ist offline Mitglied
    Registriert seit
    Aug 2011
    Beiträge
    15
    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 ).
     

  4. #4
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von eiz Beitrag anzeigen
    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/ex...h08/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/servle...ial/auth.shtml
    Zitat Zitat von eiz Beitrag anzeigen
    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 ).
    Die Seiten befinden sich alle auf deinem Server, richtig?!

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  5. #5
    eiz eiz ist offline Mitglied
    Registriert seit
    Aug 2011
    Beiträge
    15
    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)
     

  6. #6
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von eiz Beitrag anzeigen
    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.
    Zitat Zitat von eiz Beitrag anzeigen
    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ß
    eiz bedankt sich. 
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  7. #7
    eiz eiz ist offline Mitglied
    Registriert seit
    Aug 2011
    Beiträge
    15
    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.
     

  8. #8
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von eiz Beitrag anzeigen
    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.
    Du würdest den Inhalt (ggf. modifiziert) an den Browser weiterleiten. Der Browser würde ihn dann darstellen.

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  9. #9
    eiz eiz ist offline Mitglied
    Registriert seit
    Aug 2011
    Beiträge
    15
    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?
     

  10. #10
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von eiz Beitrag anzeigen
    Muss ich dann im Servlet einen InputStream öffnen, welcher das Bild irgendwie "aus der Zielseite" liest?
    Ja.
    Zitat Zitat von eiz Beitrag anzeigen
    Und für die Aktualisierung: Müsste dann jedes mal das Servlet geöffnet werden, richtig?
    Genau.
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  11. #11
    eiz eiz ist offline Mitglied
    Registriert seit
    Aug 2011
    Beiträge
    15
    Ok, ich bin jetzt soweit, dass mein Servlet das Bild liest und auch ausgibt (getestet mit System.out und sieht sehr nach Bild aus )
    Jetzt ist meine Frage wie ich das Bild auf einer HTML/JSP Seite darstellen kann.
    Mein erster Versuch:

    <img src="/Servlet" />

    hat natürlich nicht das gewünschte Ergebnis geliefert.
    Welche Klasse/Methode muss ich nutzen, um das Bild auszugeben und in die HTML einzubauen?

    Vielen Dank!
     

  12. #12
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von eiz Beitrag anzeigen
    Jetzt ist meine Frage wie ich das Bild auf einer HTML/JSP Seite darstellen kann.
    Mein erster Versuch:

    <img src="/Servlet" />

    hat natürlich nicht das gewünschte Ergebnis geliefert.
    Welche Klasse/Methode muss ich nutzen, um das Bild auszugeben und in die HTML einzubauen?
    Du mußt dem Browser den richtigen Content-Type Header übermitteln und dann das Bild als Antwort übergeben:
    Code java:
    1
    2
    3
    4
    
    // ungefähr:
     
    response.setContentType("image/png"); // den MIME Typ am besten vom Zielserver abfragen
    response.getOutputStream().write(imgData); // gelesene Daten übergeben
    \edit: es gibt auch mehrere Proxy Servlets. Du könntest dir ja mal deren Code anschauen, z.B. http://wp.edwardstx.net/wp-content/u...vlet.java_.txt

    Gruß
    Geändert von deepthroat (04.08.11 um 13:09 Uhr)
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  13. #13
    eiz eiz ist offline Mitglied
    Registriert seit
    Aug 2011
    Beiträge
    15
    Das klappt soweit, vielen Dank!

    Sollte ich nun die Webseite, auf der das Bild erscheinen soll, vom Servlet generieren lassen, oder findet der Aufruf des Servlets (zum Aufruf des Bildes) in einer neuen JSP statt?
    Geändert von eiz (04.08.11 um 13:37 Uhr)
     

  14. #14
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von eiz Beitrag anzeigen
    Sollte ich nun die Webseite, auf der das Bild erscheinen soll, vom Servlet generieren lassen, oder findet der Aufruf des Servlets (zum Aufruf des Bildes) in einer neuen JSP statt?
    Ich denke Letzteres wäre sinnvoller.

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  15. #15
    eiz eiz ist offline Mitglied
    Registriert seit
    Aug 2011
    Beiträge
    15
    Und wie mache ich das :\
    Das Servlet im img Tag "aufzurufen" hat ja nicht funktioniert...
     

Ähnliche Themen

  1. Antworten: 5
    Letzter Beitrag: 11.03.09, 13:32
  2. Antworten: 1
    Letzter Beitrag: 27.03.08, 01:04
  3. Ausblenden von Spalten in einer SELECT-Abfrage trotz "SELECT *"
    Von Greq im Forum Relationale Datenbanksysteme
    Antworten: 4
    Letzter Beitrag: 19.11.07, 23:29
  4. Basic Authenticator überladen? Oder Einsatz von JAAS?
    Von Topsen im Forum Enterprise Java (JEE, J2EE, Spring & Co.)
    Antworten: 5
    Letzter Beitrag: 28.01.06, 17:29
  5. Trotz Abfrage dennoch Eintrag in DB
    Von joky_joky im Forum PHP
    Antworten: 2
    Letzter Beitrag: 26.08.04, 12:18

Stichworte