sql >> Databasteknik >  >> NoSQL >> Redis

spring-boot redis :Hur ogiltigförklarar man alla sessioner för en användare?

Jag skulle vilja veta att you are following the correct path för att ogiltigförklara användarsessionerna

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

Något att notera

SessionInformation.expireNow()

är inte meningen att ta bort poster från redis databasen, lägger den bara till det utgångna attributet till sessionen som du med rätta nämnde.

Men hur ogiltigförklarar detta användarens session?

Här kommer ConcurrentSessionFilter i spel där.doFilter() metoden gör tricket att automatically logging out

Här är utdraget 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);
}

Skål för det!



  1. Fixa "longitud/latitud är utanför gränserna" i MongoDB när du skapar ett 2dsphere-index

  2. Referera till andra dokument med sträng snarare än ObjectId

  3. MongoDB frågar flera samlingar samtidigt

  4. Vilket är det bästa sättet att använda Redis i en multi-threaded Rails-miljö? (Puma / Sidekiq)