Allgemeine Beschreibung
Vor ein paar Tagen dachte ich versehentlich an dieses Problem und fand es ziemlich praktisch und es war notwendig, es zu klären. Es fühlt sich nicht schwierig an, einen einfachen Modus beiläufig zu schreiben. Es ist eigentlich ganz einfach, die Idee zu glätten.
Um zu erkennen, dass sich Benutzer nicht gleichzeitig anmelden können, denken Sie einfach an Sina, Baidu usw., Melden Sie sich in Wirklichkeit einfach an einem Ort an und "quetschen" den anderen Ort, und Sie können wissen, was das Implementierungsergebnis ist. Dann umkehren und Sie können eine klarere Idee bilden. Lassen Sie uns es gemeinsam diskutieren.
Zunächst müssen wir verstehen, welches Login von Benutzern zum Anmelden verwendet wird, dh das Prinzip der Benutzer online. Dies speichert nur das Objekt des Benutzers in der Sitzung und ruft es dann im Rahmen auf, und andere spezifische Seiten können direkt verwiesen werden. Dann besteht die Funktion von "zusammenpressen" darin, die neu generierte Sitzung effektiv zu gestalten und die ursprünglich im Benutzer ungültig gespeicherte Sitzung zu machen. Zu diesem Zeitpunkt wurde die allgemeine Idee festgestellt. Wie kann man es also erreichen?
Wenn Sie wissen möchten, wie Sie es implementieren möchten, müssen Sie den Prozess des Speichers von Benutzerobjekten in der Sitzung verstehen. Nachdem sich der Benutzer angemeldet hat, können wir den Objektbenutzer des Benutzers und die session.setAttribute(key,value); Wir speichern die BenutzerID des Benutzers oder eine andere eindeutige Kennung als Schlüssel und speichern das Benutzerobjekt als Wert. Auf diese Weise können Sie jederzeit und überall den einzigen Benutzer anrufen. Das Problem der Benutzerspeicherung wurde gelöst. Was ist mit dem Problem der Abschaffung der Sitzung beim Anmelden?
Das ist eigentlich nicht schwierig. Wir können mehr Sitzungseigenschaften haben, genau wie die MAP zum Speichern der Identität des Benutzers als Schlüssel und die entsprechende Sitzung als Wert. Wenn sich der Benutzer wiederholt anmeldet, müssen Sie nur die entsprechende Sitzung herausnehmen und ungültig machen.
Zu diesem Zeitpunkt war die Implementierungsidee klar. Nach so lange ist jeder ungeduldig, den Code zu lesen, oder? Hier ist der Code:
Vorvorbereitung, JSP-Schnittstelle
Die Schnittstelle ist einfach, nur eine einfache Anmeldeschnittstelle
<form action ="<%=request.getContextPath()%>/UserWXPServlet" method = "post"> Username š<input type = "text" name = "username"/><br/> Password š<input type = "text" name = "password"/><br/> <input type = "submit" value ="submit"/> </form>
Springe nach Erfolg zur Seite
Willkommen: ${sessionScope.user.username}登陆!<br/>
Ich habe keine fehlgeschlagene Seite geschrieben, Sie können sie selbst schreiben, und es gibt nichts zu sagen über die fehlgeschlagene Seite.
Implementierung von Entität und Anmeldung
Javabäer des Benutzers
privater String -Benutzername; privates Zeichenfolgenkennwort; public user () {} public user (String -Benutzer, String -Passwort) {Super (); this.username = user; this.Password = Passwort; } public String getUnername () {return userername; } public void setUnername (String -Benutzername) {this.username = userername; } public String getPassword () {Kennwort zurückgeben; } public void setPassword (String -Passwort) {this.password = password; }Melden Sie sich bei der Service -Implementierungsmethode des Benutzers an, damit ich DAO und die Schnittstelle hier nicht schreibe, alles ist einfach
public boolesche Domäne (Benutzerbenutzer) {Properties pro = new Properties (); InputStream ist = userwxpServlet.class.getClassloader (). GetResourceAsStream ("user_wxp.properties"); String password = null; System.out.println (IS+"---------->"+Pro); if (user == null) {return false; } try {pro.load (ist); password = pro.getProperty (user.getUnername ()); if (user.getPassword ()! zurückkehren; }} catch (ioException e) {e.printstacktrace (); } endlich {if (ist! = null) {try {is.close (); } catch (ioException e) {e.printstacktrace (); }} return false; }RECHT TRUE, wenn das Anmeldung erfolgreich ist, und falsch, wenn es fehlschlägt.
Servlet und entsprechende logische Werkzeugklassen
Der nächste Code ist der eigentliche Code für den Betrieb des Benutzers
Ich habe hier zwei Klassen definiert, eine Werkzeugklasse und eine Kern -Servlet -Verarbeitungsklasse
Einige gängige Elemente werden der Werkzeugklasse hinzugefügt, z. B. den folgenden Code:
/*** Jeder Benutzer speichert eine Sitzung. Einfach auf allen Arten zu arbeiten! ! ! */ public static map <String, httpSession> mapsession = new HashMap <String, httpSession> (); Benutzer -Beenden -Code (muss fliegen, um die Sitzung abzuschaffen oder das entsprechende Benutzerobjekt zu entfernen): [java] Klartext CopypyPublic static void userLogout (String -Benutzername) {if (mapsession.get (userername)! // Entfernen Sie den Benutzer in MAP <BENERNAME, Sitzung>. Denken Sie daran, den Benutzer zu beenden. Sie müssen die Sitzung abschaffen oder die Benutzerkapitalmapsession (Benutzername) entfernen. // Erhalten Sie die Sammlung von Attributen der Sitzungsaufzählung e = session.getAttributenames (); // Alle Attribute löschen while (e.hasmoreElements ()) {String SessionName = (String) e.NextElement (); Session.removeAttribute (SessionName); } // die Sitzung besitzen. Invalidate (); }}Der Servlet -Code lautet wie folgt:
Protected void dodget (httpServletRequest -Anforderung, httpServletResponse -Antwort) löst ServletException aus, ioException {String username = request.getParameter ("Benutzername"); String password = request.getParameter ("Passwort"); User user = neuer user (userername, password); UserService userService = new UserService (); HttpSession Session = Request.GetSession (); if (userService.dologin (user)) {// Nach Anmeldung fügen Sie den Benutzer in die Sitzungssitzung ein. SetatTribute ("Benutzer", Benutzer); if (CheakkSession (Benutzername)) {// Wenn die Sitzung bereits zuvor vorhanden ist, beenden Sie den Benutzer dbutil.userLogout (Benutzername); } // Die neue Sitzung in MAP <BENERNAME, Session> dButil.mapsession.put (Benutzername, Sitzung); // Nach dem erfolgreichen Operation, Sprung, ist es am besten, hier umzuleiten, dass andere wissen, dass die Anmeldung erfolgreich war. zurückkehren ; } // Überspringen Sie hier zur Fehlerseite. Wenn Leser interessiert sind, können sie es selbst hinzufügen}Der Code of CheckSession (Benutzername) lautet wie folgt:
/** * Überprüfen Sie, ob diese Sitzung bereits enthalten ist Falsch: Nicht vorhanden */ private boolesche Checksession (String -Benutzername) {httpSession Session = dbutil.mapSession.get (Benutzername); if (Session! = null) {return true; } return false; }Schließlich fügen Sie die XML -Konfiguration des Servlets hinzu
<servlet> <BEKRESCHNIS> Für das Testen können sich Benutzer nicht wiederholt anmelden. <servlet-name> userWxpServlet </servlet-name> <URL-Muster>/userWxpServlet </url-pattern> </servlet-mapping>
Das obige ist die Java-Funktion, die der Editor Ihnen zur Implementierung der Nicht-Repeat-Anmeldefunktion von Benutzern vorgestellt hat. 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!