Redis
 sql >> Datenbank >  >> NoSQL >> Redis

spring-boot redis :Wie kann man alle Sitzungen eines Benutzers ungültig machen?

Ich möchte Ihnen mitteilen, dass you are following the correct path zum Ungültigmachen der Benutzersitzungen

    usersSessions.forEach((session) -> {        
        sessionRegistry.getSessionInformation(session.getId()).expireNow();
    });

Etwas zu beachten

SessionInformation.expireNow()

ist nicht gemeint, Einträge aus der redis zu entfernen Datenbank, es hängt einfach das abgelaufene Attribut an die Sitzung an, wie Sie zu Recht erwähnt haben.

Aber wie wird dadurch die Sitzung des Benutzers ungültig?

Hier kommt der ConcurrentSessionFilter ins Spiel, wobei .doFilter() -Methode macht den Trick, sich automatically logging out

Hier ist das Snippet für ConcurrentSessionFilter

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
        throws IOException, ServletException {
    HttpServletRequest request = (HttpServletRequest) req;
    HttpServletResponse response = (HttpServletResponse) res;

    HttpSession session = request.getSession(false);

    if (session != null) {
        SessionInformation info = sessionRegistry.getSessionInformation(session
                .getId());

        if (info != null) {
            if (info.isExpired()) {
                // Expired - abort processing
                doLogout(request, response);

                String targetUrl = determineExpiredUrl(request, info);

                if (targetUrl != null) {
                    redirectStrategy.sendRedirect(request, response, targetUrl);

                    return;
                }
                else {
                    response.getWriter().print(
                            "This session has been expired (possibly due to multiple concurrent "
                                    + "logins being attempted as the same user).");
                    response.flushBuffer();
                }

                return;
            }
            else {
                // Non-expired - update last request date/time
                sessionRegistry.refreshLastRequest(info.getSessionId());
            }
        }
    }

    chain.doFilter(request, response);
}

Ein Hoch darauf!