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!