Je voudrais vous savoir que you are following the correct path
pour invalider les sessions utilisateur
usersSessions.forEach((session) -> {
sessionRegistry.getSessionInformation(session.getId()).expireNow();
});
A noter
SessionInformation.expireNow()
n'est pas moyen de supprimer des entrées du redis
base de données, il ajoute simplement l'attribut expiré à la session comme vous l'avez mentionné à juste titre.
Mais comment cela invalide la session de l'utilisateur ?
Voici le ConcurrentSessionFilter en jeu où.doFilter()
la méthode fait l'affaire de automatically logging out
Voici l'extrait pour 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);
}
Bravo !