Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

spring-boot redis :Bagaimana cara membatalkan semua sesi pengguna?

Saya ingin tahu bahwa you are following the correct path untuk membatalkan sesi pengguna

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

Hal yang perlu diperhatikan

SessionInformation.expireNow()

tidak bermaksud menghapus entri dari redis database, itu hanya menambahkan atribut kedaluwarsa ke sesi seperti yang Anda sebutkan dengan benar.

Tetapi bagaimana ini membatalkan sesi pengguna?

Di sinilah ConcurrentSessionFilter berperan di mana.doFilter() metode melakukan trik automatically logging out

Berikut adalah cuplikan untuk 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);
}

Semangat untuk itu!



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. kompilasi klien redis kustom gagal

  2. Nama bidang Id Entitas ServiceStack

  3. Redis auth error dengan Node.js dan socket.io

  4. Redis menulis ke .ssh/authorized_keys

  5. spring-redis tidak dapat terhubung ke host jarak jauh