Im aktuellen Webprojekt sind viele Situationen, dass diesmal dieselben Kontoinformationen an verschiedenen Anmeldeportalen angemeldet werden können, sodass dies nicht so schön ist.
Empfohlenes Lesen:
Implementierung von Java-Multi-Benutzer-Anmeldungsbeschränkungen
Es gibt jetzt zwei Lösungen:
1. Speichern Sie die Anmeldeinformationen des Benutzers mit einem Feld in einem Flag. Jedes Mal, wenn der Anmeldung erfolgreich ist, ist er 1 markiert und der Anmeldung mit 0 markiert. Wenn es 1 markiert ist, darf es sich nicht anmelden.
2. Speichern Sie die Anmeldeinformationen des Benutzers im integrierten Umfang der Anwendung und verwenden Sie dann den Sitzungshörer, um den Anmeldestatus jedes angemeldeten Benutzer zu überwachen.
Offensichtlich erfordert die erste Methode das Betrieb der Datenbank jedes Mal, wenn Sie sich anmelden, was einen unnötigen Leistungsaufwand ergänzt. Wenn der Computer während des Anmeldeszustands plötzlich heruntergefahren wird, werden Sie sich nie anmelden und die Benutzerfreundlichkeit ist relativ niedrig.
Die zweite Methode ist jedoch unterschiedlich, es ist sehr bedienbar und bequem, die Informationen aller Online -Benutzer zu verwalten.
Als nächstes werden wir hauptsächlich die spezifische Implementierung der zweiten Methode einführen:
1. Fragen Sie in der Anmeldemethode zur Verarbeitung von Anmeldungen zunächst die Datenbank ab, um zu überprüfen, ob der Benutzer existiert. Wenn dies vorhanden ist, stellen Sie fest, ob das Anmeldekonto gesperrt wurde. Nehmen Sie dann alle Anmeldeinformationen aus dem integrierten Anwendungs-Bereichsobjekt heraus, um zu überprüfen, ob das Benutzername-Konto angemeldet wurde. Wenn es angemeldet ist, ist es eine freundliche Eingabeaufforderung. Andernfalls bedeutet dies, dass Sie sich anmelden und die Anmeldeinformationen in der Anwendung in Form eines Schlüsselwertpaars speichern können.
Der Code ist wie folgt:
// Aktion muss zu jeder Zugriffsmethode vor Nullkonfiguration hinzugefügt werden, ansonsten 404 @Action (value = "login", resulting = {@result (name = "index", location = "index.jsp"),}) public string login () löst Ausnahme aus {try {user result = userservice.login (user.getfuusername (), user.getfupsword (). if (Ergebnis! "Fehler" zurückgeben; } Map <string, string> loginusermap = (map <string, string>) super.getApplicationAttr (konstant.login_user_map); boolean isexist = false; String SessionID = Super.GetSessionId (false); if (loginusermap == null) {loginusermap = new HashMap <String, String> (); } für (String-Benutzername: loginusermap.keyset ()) {// Beurteilen Sie, ob die Informationen des protokollierten Benutzers gespeichert wurden oder ob derselbe Benutzer wiederholt angemeldet ist, dann ist Login zulässig, wenn (! userername.equals (result.getFuusername) || loginusmap.containsValue (SessionID) {continials; } isExist = true; brechen; } if (isExist) {Super.setRequestAttr (konstant.message, "Entschuldigung, der Benutzer ist angemeldet!"); "Fehler" zurückgeben; } else {loginusermap.put (result.getFuusername (), SessionID); } // erfolgreich super.etSessionAttr (constant.login_user, result); Super.setApplicationAttr (konstant.login_user_map, loginusermap); logger.info (result.getFuusername () + "Anmelden erfolgreich!"); // Wenn Fromurl in der Sitzung einen Wert hat, springen Sie zur Seitenstring vonurl = (String) Super.getSessionAttr (konstant.from_url); if (fromUrl! = null) {super.setSessionAttr (konstant.from_url, null); super.getResponse (). sendRedirect (fromurl.toString ()); null zurückkehren; } return "Index"; }} catch (Ausnahme e) {e.printstacktrace (); logger.info ("Anmeldung fehlgeschlagen:"+e.getMessage ()); } Super.setRequestAttr ("message", "error"); "Fehler" zurückgeben; }2. Nachdem das Anmeldungsportal verarbeitet wurde, sollte sich der entsprechende Anmeldebenutzer auch entsprechend aus dem Anmeldung abmelden. Wir können einen Sitzungshörer schreiben. Wenn die Sitzung zerstört wird, haben wir den angemeldeten Benutzer ausgeloggt, dh ihn aus der Anwendung entfernen. Dies bedeutet, dass der Benutzer offline war.
Der Code ist wie folgt:
Paket com.facelook.util; import Java.util.map; import Javax.servlet.http.httpSessionEvent; importieren javax.servlet.http.httpSessionListener; import org.apache.log4j.logger; import com.facelook.entity.user; öffentliche Klasse SessionListener implementiert httpSessionListener {private logger logger = logger.getLogger (this.getClass ()); @Override public void sessioncreated (httpSessionEvent Ereignis) {} @Override public void SessionDestroyed (httpSessionEvent Ereignis) {// Die wichtigsten Wertpaare löschen, die in loginUlermap gespeichert sind, wenn die Sitzung zerstört wird. if (user! loginUsermap.remove (user.getFuusername ()); Event.GetSession (). getServletContext (). setAttribute ("loginusermap", loginusermap); }}}Die Konfiguration in web.xml lautet wie folgt:
<!-Session-Listener-> <Hörer> <Hörer-Klasse> com.facelook.util.sessionListener </Listener-Klasse> </Listener>
3. Außerdem gibt es ein anderes Problem. Wenn der angemeldete Benutzer plötzlich den Browser oder die Seite schließt, ohne auf die Schaltfläche Abmelden zu klicken. Anschließend können Sie das vorübergreifende Ereignis verwenden, um zu schießen, wenn der Browser aktualisiert oder schließt.
// Ereignisse $ (Fenster) .bind ('voranlad', function () {$ .ajax ({url: "$ {ctx} /system/user/user!Logout.Action", Typ: "post", Erfolg: function () {alert ("Sie haben sich angemeldet");}});););););););););););Wenn jedoch einige objektive Gründe wie der Computer plötzlich heruntergefahren, automatisch neu starten usw., können diese nicht vermieden werden, sodass Sie nur darauf warten können, dass die Sitzungssitzung der Server-Seite zurückgesetzt wird, bevor Sie sich erneut anmelden können.
Sofern es sich nicht um ein Modul handelt, das alle Online -Mitarbeiter zählt, verwaltet der Administrator den Anmelde- und Abmeldestatus von Online -Mitarbeitern und zerstört die angemeldeten Benutzer mit Problemen direkt.
Lassen Sie uns als nächstes kurz die Verwaltung von Online -Personalmodulen vorstellen:
1. Zunächst wird ein Sitzungshörer benötigt, um alle Antworten erstellen Situationen zu überwachen. Zu diesem Zeitpunkt kann jedes Mal, wenn eine Sitzung erstellt wird, Count+1 gezählt werden und dann wird Count-1 zerstört. Darüber hinaus wird ein ServletContext -Listener benötigt, um den Lebenszyklus der Webanwendung zu überwachen, das ServletContext -Objekt zu erhalten und dann die Gesamtzahl der Online -Mitarbeiter zu zählen und es zu speichern.
Der spezifische Code lautet wie folgt:
Paket com.facelook.util; import Java.util.map; importieren javax.servlet.servletContext; importieren javax.servlet.servletContexevent; importieren javax.servlet.servletContextListener; import Javax.servlet.http.httpSessionEvent; importieren javax.servlet.http.httpSessionListener; importieren javax.servlet.http.httpSessionListener; import org.apache.log4j.logger; import com.facelook.entity.user; public class sessionListener implementiert httpSessionListener, servletContextListener {private int count; private servletContext ServletContext = null; public SessionListener () {count = 0; } private logger logger = logger.getLogger (this.getClass ()); @Override public void sessioncreated (httpSessionEvent Ereignis) {count ++; setContext (Ereignis); logger.info ("************ Die HTTP -Sitzung wird erstellt ... ****************"); } @Override public void sessionDestroyed (httpSessionEvent Ereignis) {// Löschen Sie die in loginusermap gespeicherten Schlüsselwertpaare, wenn die Sitzung zerstört wird user user = (user) event.getSession (). GetAtTribute ("Loginuser"); if (user! loginUsermap.remove (user.getFuusername ()); Event.GetSession (). getServletContext (). setAttribute ("loginusermap", loginusermap); } zählen--; setContext (Ereignis); logger.info ("************ Die HTTP -Sitzung wird zerstört ... *******************"); } public void setContext (httpSessionEvent httpSessionEvent) {httpSessionEvent.getSession (). } @Override public void contextDestroyed (servletContexevent servletContexevent) {this.servletContext = null; logger.info ("************ Der Servlet -Kontext wird zerstört ... *******************"); } @Override public void contextInitialized (servletContexevent servletContexeVvent) {this.servletContext = servletConteEvent.getServletContext (); logger.info ("************ Der Servlet -Kontext wird initialisiert ... ****************"); }}2. Erstellen Sie ein Modul, um Online -Benutzer in der Benutzeraktion zu verwalten und die erzwungene Ausstiegsfunktion zu unterstützen.
/ ** * logout * @return * @throws ServletException * @throws ioException */ public String logout () löst ServletException aus, ioException {try {map <string, string> loginusermap = (map <string>) super.getApplicationAttr (konstant.login_user_map); User user = (user) super.getSessionAttr (konstant.login_user); Super.RemoveAttribute (konstant.login_user_map); loginUsermap.remove (user.getFuusername ()); Super.setApplicationAttr (konstant.login_user_map, loginusermap); logger.info ("Login Login erfolgreich!"); } catch (Ausnahme e) {e.printstacktrace (); logger.Error ("Anmeldung fehlgeschlagen:"+e.getMessage ()); } Rückgabeeingabe; } / *** Online -Benutzerverwaltung* @return* / public String loginManager () {return Erfolg; } / *** Erzwingen Sie den Beenden von anderen Benutzern. Karte <String, String> loginusermap = (map <string, string>) super.getApplicationAttr (konstant.login_user_map); if (Benutzername! Super.setApplicationAttr (konstant.login_user_map, loginusermap); }} catch (Ausnahme e) {e.printstacktrace (); logger.info ("gewaltsam beenden fehlgeschlagen:"+e.getMessage ()); } return null; }3. Laden Sie die Liste der Online -Benutzer auf der Verwaltungsseite.
Nachdem die entsprechende Methode definiert ist, fügen Sie der entsprechenden Verwaltungsseite wie folgt eine Online -Liste hinzu:
<%@page import = "java.util.map"%> <%@page import = "java.util.map.enterry"%> <%@page Sprache = "java" pageCoding = "utf-8"%> <%@include File = "/Common/taglib.jsp"%> <! docType html 1.0 // W3C // Dtd Xhtmtm. Transitional // en "" http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd "> <html xmlns =" http://www.w3.org/thttml "; content="text/html; charset=utf-8" /> <title>Welcome to Facelook</title> <%@ include file="/common/resource.jsp" %> <script type="text/javascript"> <!-- // Events $(window).bind('beforeunload',function(){ $.ajax({ URL: "$ {CTX}/System/User/User! Funktion logout (Benutzername) {if (userername == "$ {sissionscope.loginuser.fuusername}") {alert ("logout Ihres Kontos!"); zurückkehren; } $ .ajax ({url: "$ {ctx} /system/user/user!Logoutother.Action?username ="+userername, Typ: "post", Erfolg: function () {$ ("#tr"+username) .hide (); var count = parseint ("##count"). $ ("#count"). html (count-1); } //-> </script> </head> <body> <%@ includedatei = "/Common/header.jsp"%> <div id = "main"> <%@ include File = "/Common/lefter.jsp"%> <div> <div> <h2> loginlist </h2> <%map <diven> <div> <div> <h2> loginlist </h2> <%map <-Sting> map = (map = (map < out.println ("Derzeit gibt es <font id = 'count'>"+map.size ()+"</font> Benutzer online !!"); %> <table> <%für (Eintrag <String, String> m: map.EntrySet ()) {%> <tr id = "tr <%= M.Getkey ()%>"> <%= M.Getkey ()%> </td> <td> <a href = "JavaScript: logout ('<%= M.Getkey ()%>)") "Gewalt Auszug" </td> <%= M.GetEly () ")") ")") "). <%}%> </table> </div> </div> </div> <%@ include file = "/Common/footer.jsp"%> <%@ include File = "/Common/message.jsp"%> </body> </html>OK, starten Sie das Bereitstellungsprojekt, starten Sie dann den Dienst und geben Sie das Online -Benutzerverwaltungsmodul ein. Der einfache Effekt ist wie folgt:
Es ist zu beachten, dass der aktuelle Login -Benutzer kein Anmeldung aus seinen Anmeldeinformationen erzwingen darf.
Auf diese Weise können Fälle, in denen mehrere Benutzer daran gehindert werden, sich anzumelden, im Grunde genommen realisiert werden!
Die oben genannte ist die perfekte Lösung für die Java -Webentwicklung, um zu verhindern, dass sich mehrere Benutzer wiederholt anmelden. 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!