Как проверить, недействителен ли HttpSession без запроса

У меня есть карта 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());
    }
...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
132
1

Ответы 1

Я пробую этот способ, и, похоже, он работает нормально!

public static void cleanUpMemorySessions() {
    sessions.entrySet().forEach((entry) -> {
        try {
            entry.getKey().isNew();
        } catch(IllegalStateException e) {
            sessions.remove(entry.getKey());
        }
    });
}

Другие вопросы по теме