Redis
 sql >> база данни >  >> NoSQL >> Redis

spring-boot redis :Как да анулирате всички сесии на потребител?

Бих искал да ви знам, че you are following the correct path за обезсилване на потребителските сесии

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

Нещо за отбелязване

SessionInformation.expireNow()

не означава премахване на записи от redis база данни, той просто добавя атрибута с изтекъл срок към сесията, както правилно споменахте.

Но как това прави невалидна сесията на потребителя?

Тук идва ConcurrentSessionFilter в игра, където.doFilter() метод прави трика за automatically logging out

Ето фрагмента за 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);
}

Наздраве за това!



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Оптимизация на производителността на Nodejs

  2. DigitalOcean pod има необвързани незабавни PersistentVolumeClaims

  3. nodejs, redis. проверете дали ключовете съществуват и създайте нови, ако не

  4. Грешка в Redigo ScanStruct с time.Time

  5. Как да получа стойности от Redis с помощта на ключове, които съдържат интервали?