Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

spring-boot redis:Làm cách nào để vô hiệu hóa tất cả các phiên của người dùng?

Tôi muốn biết với bạn rằng you are following the correct path để làm mất hiệu lực các phiên người dùng

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

Những điều cần lưu ý

SessionInformation.expireNow()

không có nghĩa là xóa các mục nhập khỏi redis cơ sở dữ liệu, nó chỉ nối thuộc tính đã hết hạn vào phiên như bạn đã đề cập đúng.

Nhưng điều này làm mất hiệu lực phiên của người dùng như thế nào?

Đến đây, ConcurrentSessionFilter sẽ hoạt động trong đó .doFilter() phương pháp thực hiện thủ thuật automatically logging out

Đây là đoạn mã cho 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);
}

Chúc mừng!



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm thế nào để đạt được cùng thứ hạng với cùng số điểm trong Redis 'ZRANK?

  2. Bộ cấu hình Redis với Node jS

  3. phpredis trên Windows 7 64bit xampp

  4. Cách nhận nhiều giá trị danh sách trong một lần gọi trong RedisTemplate của Jedis Client

  5. Twisted:tại sao việc chuyển một lệnh gọi lại bị hoãn lại đến một chuỗi bị hoãn lại khiến cho chuỗi đó đột ngột bị chặn?