bizarrus Geschrieben 27. April 2010 Teilen Geschrieben 27. April 2010 Hallöchen =) Ich habe eine kleine denkschwäche. Undzwar möchte ich folgendes Realisieren: Es existiert eine socket-connection zwischen (sagen wir mal) 20 Clients und einem Server. Es werden ständig Nachrichten hin und her versendet, durch den Server an alle anderen Clients verteilt, etc. Jezt möchte ich dies mit einem MySQL Basiertem Login-System ausstatten. Der Server läuft über einem Debian-Server, die Clients hingegen werden über das Web aufgerufen. Ich habe bereits ein Login-Applet erstellt, der nach erfolgreichem "Login" dann ein JFrame aufruft, wo die Messages hin und her versendet werden können. Das Problem: Wie kann ich der Applikation sagen "Ich bin mit dem Benutzer XYZ angemeldet"? Weiteres Problem: 1. Das komplette DB-handling muss über dem Server geschehen, denn ich möchte nicht, das jemand die DB-Daten herausbekommt, sofern er den Clienten decompiliert. 2. wie kann ich festlegen das der Client eine bestimmte Authentifikation besizt, die dann über der DB gespeichert bzw abgefragt wird? In PHP, da ich mit PHP bereits länger erfahrung habe, würde ich z.B. bei PHP mit Sessions arbeiten & die jeweilige Session-id in der DB abspeichern. Die Session-Id wird dann über der DB geprüft und jenachdem ist man dann entweder nicht eingeloggt, oder man ist zurzeit benutzer XYZ online. Wie aber mache ich dies über/mittels Java? Generell muss dies ja über dem Server laufen, der dann dem Clienten sagt "Ja, du bist eingeloggt" oder "Nein, du darfst nicht, logge dich erst ein". Kann mir jemand Tipps geben? Habe bereits gegoogelt. Meist kamen aber Informationen über PHP-Loginsysteme, was ich ja nicht benötige, oder aber Servlets-beispiele - mit denen ich ja nicht arbeite. Oder aber es gab beispiele, wie man zwar ein Login visualisiert, dies aber direkt mit einer DB-connection gelöst wurde, was ich ja nicht will. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 27. April 2010 Teilen Geschrieben 27. April 2010 Ich denke in Java musst Du ein Session-Handling selbst implementieren, etwas fertiges ist mir nicht bekannt, wobei Du das auch nicht direkt benötigst, denn wenn Du Dich an der DB authentifiziert hast, das ja der Client macht, kannst Du so lange der Client nicht geschlossen wurde, dass die Session gültig ist. Willst Du PHP Sessions und Java synchron verwenden, dann musst Du das ganze wohl passend selbst schreiben, wobei Du eben ggf die PHP Session passend aus dem Java Client updaten musst. Bei dieser Problemstellung würde ich wohl aber eher zu SOAP greifen, wobei ich den Dienst in PHP inkl PHP Session-Management implementieren würde und Java dann nur via SOAP die Daten abfragt Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
bizarrus Geschrieben 27. April 2010 Autor Teilen Geschrieben 27. April 2010 (bearbeitet) Hmm blöd. Naja gut wäre ja theoretisch ja dann 2 offene möglichkeiten oder? Naja, vllt auch mehrere. Möglichkeit 1: Über parameter des Applets & PHP die Session-id einbinden. Möglichkeit 2: Da ich einen Multithreaded socketserver implementiert habe, könnte ich ja Theoretisch ja auch die gerade benuzte Socket-connection als "eindeutige" login-authentifikation benutzen, oder? Wenn ich z.B. mittels System.out.println(); den buffer-reader (oder das war glaube ich auch von der Hashtable, die ich als "Client-Container" verwende) ausgebe, gibt der mir immer ein Objekt aus (in form von "keinPlan@262361535"), k.a. ob das dann so funzt und ob diese ausgabe bei einer ganzen connection dann so erhalten bleibt, bis die connection unterbrochen wird. Wäre das denn möglich? Ich habe gerade erst mit Socket-Connections angefangen und weiß halt noch nicht alles, jeder fängt ja mal klein an ^^ Möglichkeit 3: Mir ist gerade eingefallen, man könnte Ja auch die authentifikation (die nur für einen Tag dann gillt) über der IP Adresse beziehen. D.h. du loggst dich ein, die IP wird dann in der DB unter deinem user gespeichert und dann bist du eingeloggt, sofern die IP gleich ist. Nachteil hier hingegen: - Jeder könnte diese IP vom Anbieter zugewiesen bekommen, ist dann aufeinmal eingeloggt mit irgendeinem account, was eig. nicht sinn & zweck ist - Pro Internetanschluss kann nur ein user online sein Aber ich danke schonmal im vorraus für reichliche Infos. Achja, noch eine Frage: Ich verwende eine Hashtable. Wenn ein Client zum server connectet, fügt der server den Clienten zur Hashtable hinzu. Die hat den sinn, das dadurch dann alle Clients dieselben daten empfangen (syncronisierung). Wäre es möglich jedem Clienten eine eindeutige ID serverseitig zuzuweisen? Edit Mir fällt gerade noch etwas ein. Man kann ja über Java internet-seiten parsen. Kann man dadurch evtl auch die Session-id herausbekommen? (Damit meine ich nicht, das ich eine Extra PHP-file anlege, die nur die session-id printet) Bearbeitet 27. April 2010 von bizarrus Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
speedi Geschrieben 28. April 2010 Teilen Geschrieben 28. April 2010 (bearbeitet) Ich habe mir sowas schonmal gebaut - allerdings innerhalb eines Servlets. Wobei das mit Applets eigentlich genau das gleiche in grün sein sollte. Bei JSP: Speicher die SessionID, die IP und den Usernamen des Clients in einer DatenbanktTabelle mit der Zeit des einloggens. Wenn der User dann abfragen stellt musst nur in der Datenbank schauen, ob der Eintrag für diese Verbindung existiert und wie der Username dazu ist. Die IP habe ich nur gespeichert um zu verhindern, dass ein anderer die SessionID fäschen kann - bei der IP dürfte das nämlich schon etwas schwerer werden (aber auch nicht unmöglich). Bei Applets: Da kannst du eigentlich genau so vorgehen, nur dass du dir die Session-ID selbst erzeugen musst. Am besten erzeugst du die Serverseitig um sicher zu gehen dass nicht zufällig ein anderer User die gleiche ID hat und schickst sie dann dem Client(z.B. byte[16] mit Random-Werten - dann prüfst du, ob das mit einem anderen eingeloggten user übereinstimmt und we ja erzeugst eine neue id). Ich hatte damals noch einen Thread am laufen, der einmal in der Minute der Login-Tabelle gesagt hat, dass sie alle einträge rausschmeißen soll die älter als 15 minuten sind (Auto-Logoff). Die Login-Infos kannst du anstelle einer Datenbank-Tabelle auch genauso gut in einer lokalen Objekt-Liste halten ich hab das damals nur so gelöst um sicher zu stellen, dass mehrere JSP-Server parallel arbeiten können. _________________________________ Die Idee als Authentifizierung das Socket-Objekt zu verwenden ist gar nicht übel. Ich würde aber zusätzlich trotzdem noch eine klassische SessionID (eine zufällige, einmale Abfolge von z.B. 128-Bit verwenden) - kommt halt bissl drauf an wie gut du den Laden abdichten willst/musst. Referenzen auf gleichheit prüfen geht nämlich schwupp-die-wupp wenn du aber bei zwei Arrays auf ihren Inhalt vergleichen musst ist das langsamer. Bearbeitet 28. April 2010 von speedi Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.