Die Implementierungsidee von Javaweb, die sich nur an einem Ort anmelden kann (ähnlich wie bei der QQ -Anmeldefunktion), lautet wie folgt:
1. Was ist die Funktion dieser Funktion?
Jeder denkt darüber nach. Wie auch immer, es wird immer eine solche Nachfrage geben. Heutzutage wird es keine Nachfrage geben. . hehe. Manchmal ist es möglicherweise keine Anforderung, und es ist sehr wahrscheinlich, dass dies auch aus Sicherheit der Fall ist. Zum Beispiel sind dafür das Prüfungssystem und das Online -Chat -System erforderlich.
2. Implementierungsprozess
A. Problemanalyse
Im System binden wir normalerweise die Anmeldeinformationen an die Sitzung. Es scheint, dass es möglich ist, eine Lösung zu finden. Um es unverblümt auszudrücken: Wenn sich der Benutzer anmeldet, bestimmen Sie, ob der Benutzer angemeldet ist. Wenn er sich anmeldet, ist es in Ordnung, die vorherige Sitzung zu löschen. . Es scheint sehr einfach, oder? Wenn Sie sorgfältig darüber nachdenken, werden Sie das folgende Problem finden: Wie kann der Benutzer schon einmal angemeldet, dh, wie Sie auf alle angemeldeten Sitzungsinformationen zugreifen können?
B. Spezifische Implementierung
Wie wir alle wissen, scheint es keine spezifische Methode zu geben, um alle Sitzungsinformationen in der J2EE -API direkt zu erhalten. Wir können jedoch alle Sitzungs- und Zerstörungsprozesse der Sitzung überwachen, indem wir die Hörer konfigurieren und die Erstellungs-, Lösch- und Ersatzprozesse von Attributen in der Sitzung überwachen.
Tatsächlich müssen wir nur Folgendes tun:
Beim Speichern von Benutzeranmeldeinformationen in der Sitzung ist die entsprechende Sitzung der Attribute -Prozess des Erstellens eines Attributs, mit dem die aktuelle Sitzung in einer ArrayList aufgezeichnet werden kann.
Wenn Sie sie auf die Liste speichern, müssen Sie zuerst durchqueren, ob in dieser Liste bereits die Anmeldeinformationen des Benutzers vorhanden sind. Wenn es vorhanden ist, zerstören Sie die in dieser Liste vorhandenen Sitzungsinformationen und entfernen Sie sie aus der Liste. Wenn es nicht vorhanden ist, legen Sie die Sitzungsinformationen in die Liste.
Wenn die Anmeldeinformationen der Sitzung zerstört werden, entfernen Sie die Sitzung direkt aus der Liste.
Wenn sich der Benutzer anmeldet, ohne sich direkt anzumelden und sich direkt anzumelden, ist dies ein Prozess, um das Sitzungsattribut zu ersetzen. Es ist auch notwendig zu bestimmen, ob der neue Benutzer neben der aktuellen Sitzung bereits in anderen Sitzungen existiert. Wenn es existiert, löschen Sie es.
Der spezifische Code lautet wie folgt:
Paket com.weirhp; import Java.util.ArrayList; Import Java.util.Collections; Import Java.util.List; Import Javax.Servlet.http.httpSession; importieren javax.servlet.http.httpSessionbutiButiButIntener; javax.servlet.http.httpSessionEvent; import Javax.servlet.http.httpSessionListener; Public Class RecordSessionListener implementiert httpSessionAttributelistener, httpsessionListener {private statische Liste <SesionandusSer> öffentlich statische statische statische Streichung loginflag = loginuser "static static static static static static loginflag =" loginuser ". NULL) {SESSIONS = COURMENS.SYNCHRONISCHELISTE (New ArrayList <SesionAnduser> ());}} public void Attributeded (httpSessionBindingEvent e) {httpSession Session (attrName.equals (loginflag)) {user nowuser = (user) e.getValue (); Benutzer suser = (user) session.getAttribute (loginflag); // 遍历所有 SessionFOR (int i = sessions.size ()-1; i> = 0; (tem.getUerId (). Equals (nowuser.getName ()) {tem.getSession (). Invalidate (); // REMET REMEBREAK AUTOR REMEDREAK;}} Sessionanduser Sau = new Sessionanduser (); Sau.SetUserid (nowuser.getName ()); Sau.SetSession (Sitzung); Sau.Setsid (Session.getId ()); E.GetSession (); System.out.println ("------------- i> = 0; i--) {sessionanduser tem = sessions.get (i); if (tem.getUserid (). Equals (nowuser.getName ()) {sessions.remove (i); break;}}}} public void AttrUTUTEREPLADE (httpSessionBindingEnvent e) {httpessions Session = E.GetSession (); System.out.println ("-----------------*Ersetzen*-----------------------"); String attrname = E.getName (); int dels = -1; // 登录 if (attrName.equals (loginflag)) {// Benutzer nowuser = (user) E.GetValue (); // // Old Valueer Nowuser = (user) E.GetValue (); // // // alte Wert nowuser = (user) E.GetValue (); // // // alte Wert nowuser = (user); (Benutzer) Session.getAttribute (LoginFlag); // Der Benutzer in der aktuellen Sitzung // durchquert alle Sitzungen (int i = sissions.size ()-1; i> = 0; i--) {Sessionanduser TEM = SESSIONS.get (i); wenn (i); (tem.getUerId (). Equals (nowuser.getName ()) &&! tem.getSID (). Equals (session.getId ()) {System.out.println ("entfernen: ungültig 1!"); Dels = i;} else if (tem.getSID (). Equals (Session.getId ()) {tem.setUserid (nowuser.getName ());}} if (dels! Es wird auch aus den Sitzungen entfernt}}} public void sessioncreated (httpSessionEvent e) {} public void sessionDestroyed (httpSessionEvent e) {}}Formulierung in Web.xml
<Hörer> <display-name> Datensätze </display-name> <hörerklasse> com.weirhp.recordsesionListener </Listener-Klasse> </Listener>
3. Mögliche Probleme
Es kann einige Dinge geben, die das gesamte Programm nicht erwartet hat. Es kann einige Fehler geben, und Sie müssen bei bestimmten Projekten vorsichtig sein. Jeder ist herzlich eingeladen, ein Bild zu machen und zu hoffen, einige Vorschläge zu machen. Ich werde es wieder verbessern.
4. Einige Gedanken später
Wenn beide Maschinen gleichzeitig dasselbe Konto verwenden, um sich beim System anzumelden, können beide Konten erfolgreich angemeldet werden? . (Wenn diese Sitzungsliste sehr groß ist, können sich zwei Maschinen erfolgreich anmelden, wenn sie sich während der Durchfahrtszeit beim System anhand desselben Kontos anmelden.) Sehr verwickelt. . Wie sollte es kontrolliert werden?
(Lösung: Nach dem Testen ist der Hörer ein Singleton im System. Das Hinzufügen des Schlüsselworts Synchronize zu seiner Methode kann die Sicherheit der Thread der Liste sicherstellen.)
Das obige ist der Ihnen vorgestellte Javaweb, dass sich der Editor nur an einem Ort gleichzeitig anmelden kann (ähnlich der QQ -Anmeldungsfunktion). Ich hoffe, es wird für alle hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird allen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!