У меня есть карта HttpSession и ip, который добавляется при инициализации запроса. Обычно он удаляется при разрушении сеанса, но иногда этого не происходит, и я хочу сделать это вручную.
Как удалить сеансы, которые уже признаны недействительными с этой карты?
Слушатель
...
private static final Map<HttpSession, String> sessions = new ConcurrentHashMap<>();
@Override
public void requestInitialized(ServletRequestEvent ev) {
HttpServletRequest request = (HttpServletRequest) ev.getServletRequest();
HttpSession session = request.getSession();
if (session.isNew()){
sessions.put(session, request.getRemoteAddr());
}
}
@Override
public void sessionDestroyed(HttpSessionEvent ev) {
sessions.remove(ev.getSession());
}
...




Я пробую этот способ, и, похоже, он работает нормально!
public static void cleanUpMemorySessions() {
sessions.entrySet().forEach((entry) -> {
try {
entry.getKey().isNew();
} catch(IllegalStateException e) {
sessions.remove(entry.getKey());
}
});
}