Mein Szenario ist, gibt es zwei verschiedene Benutzer anmelden mit der gleichen Benutzer-ID und password.mean Zeit einer der Person ändern Sie das Passwort, indem Sie das aktuelle Passwort. Und änderte das Passwort zur gleichen Zeit, die ein anderer Benutzer gibt das aktuelle Passwort, was er falsch eingeloggt war. Also ich möchte Logout von allen anderen Geräten in meiner Web-Anwendung hinzufügen. Wie kann ich das tunSo fügen Sie Abmelden von allen anderen Sitzung
Antwort
Es gibt natürlich mehr als einen Ansatz, meine erste Idee wäre, die Sitzungen an die ServletContext zu haken. So etwas wie
// this can be in some util class, let's call it SessionUtil
static final String SESSION_REGISTER = "session.register";
public static synchronized void registerSession(ServletRequest req, HttpSession ses, String userName) {
ServletContext ctx = req.getServletContext();
Map<String, List<HttpSession>> register = (Map<String, List<HttpSession>>) ctx.getAttribute(SESSION_REGISTER);
if (register == null) {
register = new HashMap<>();
ctx.setAttribute(SESSION_REGISTER, register);
}
List<HttpSession> sessions = register.computeIfAbsent(userName, k -> new ArrayList<>());
sessions.add(ses);
}
Dann in Ihrem Code, müssen Sie die Sitzung des Benutzers nach dem Login registrieren:
HttpSession ss = request.getSession();
if (isUser(name,password)) {
ss.setAttribute("user",name)
SessionUtil.registerSession(request, ss, name);
}
Schließlich müssen Sie eine Methode (wieder in SessionUtil
Klasse) die alle Benutzer entkräften Sitzungen (außer dem aktuellen):
public static synchronized void invalidateSessions(ServletRequest req, HttpSession current, String userName) {
ServletContext ctx = req.getServletContext();
Map<String, List<HttpSession>> register = (Map<String, List<HttpSession>>) ctx.getAttribute(SESSION_REGISTER);
if (register != null) {
List<HttpSession> sessions = register.get(userName);
if (sessions != null) {
for (HttpSession ses : sessions) {
if (!ses.equals(current)) {
ses.invalidate();
}
}
}
}
}
Dann können Sie diese Methode zB aufrufen wenn der Benutzer sein Passwort ändert.
Hinweis # 1: Nicht ein sehr netter Code, es vermisst einige Plausibilitätschecks und synchronized
kann kleinere Stücke Code sein. Es ist nur, um dir eine Idee zu geben.
Hinweis # 2: Die Funktionalität der registerSession(...)
Methode kann die HttpSessionAttributeListener verwendet getan werden, aber ich habe es noch nie benutzt, so kann nicht ein Beispiel geben.
vielen Dank .. es funktioniert – Jagadish
- 1. Abmelden von allen Sitzung
- 2. So löschen Sie die Sitzung beim Abmelden
- 3. Benutzer von allen aktiven Registerkarten abmelden
- 4. Muss ich mich in allen Fällen von allen Veranstaltungen abmelden?
- 5. So entfernen Sie statische Eigenschaften von Sitzung
- 6. Hilfe erforderlich Benutzer abmelden/abmelden Nach der Sitzung TImeout
- 7. So fügen Sie eine Aktionsleiste in allen Aktivitäten hinzu
- 8. So fügen Sie allen Seitenanchorverknüpfungen weiches Scrollen hinzu
- 9. So verwenden Sie die Sitzung zum automatischen Abmelden von einem PC, wenn der Benutzer an einem anderen PC angemeldet ist
- 10. So fügen Sie von einem anderen Benutzer Control-Datagrid-Rekord
- 11. ASP.NET Identität, fügen Sie einen anderen Benutzer Rolle sofort (sie müssen nicht abmelden und wieder)
- 12. Sitzung wird beim Abmelden nicht zerstört?
- 13. Abmelden/Sitzung Timeout mit Feder Sicherheit fangen
- 14. Fügen Sie eine Variable zu allen Rendering
- 15. CakePHP-Sitzung/auth abmelden mit Unterbrechungen
- 16. PHP Sitzung nicht abmelden/nicht setzen
- 17. So fügen Sie ausgewählte Knoten in die Protokolldatei ein
- 18. So öffnen Sie das Elektron mit einer anderen Sitzung
- 19. ASP.net Identity 2.0 Abmelden eines anderen Benutzers
- 20. Cocoapods: Abmelden von MagicalRecord Abmelden
- 21. Facebook-Sitzung abmelden und Anmeldung starten Aktivität
- 22. Abmelden eines Benutzers beim Ablauf der Sitzung
- 23. So fügen Sie CSS-Stil von Javascript
- 24. So fügen Sie eine Zeile an einen anderen Datenrahmen an
- 25. So fügen Sie eine Baugruppe in einer anderen Baugruppe hinzu?
- 26. Android - So fügen Sie ListView Artikel dynamisch aus anderen Klassen
- 27. Android: So fügen Sie Ansichten aus einem anderen Layout hinzu
- 28. So fügen Sie UIActivityViewController-Objekten einen anderen Text hinzu
- 29. So aktivieren Sie das Abmelden einzelner Anwendungen in CAS?
- 30. Refreshing Sitzung von anderen Servlet
Willkommen bei SO! Bitte lesen Sie [Wie Sie fragen] (https://stackoverflow.com/help/how-to-ask) und [Wie erstelle ich ein Minimal, vollständig und verifizierbar] (https://stackoverflow.com/help/mcve) Beispiel, und aktualisieren Sie Ihre Frage dann. Kurz gesagt: schreibe keinen Aufsatz, in dem du erklärst, was du tun willst, ** zeige stattdessen deinen Code ** (was hast du bisher versucht). –
Aber das Szenario muss ich erklären .. und ich habe keine Ahnung, wie man das macht – Jagadish
Sie müssen den Code teilen. Wenn nicht, können Sie teilen, wie Sie eine Sitzung erstellen, wo Sie Daten speichern usw. – Preet