попросить контейнер уведомить ваше приложение, когда время ожидания сеанса в Java истекает - PullRequest
0 голосов
/ 08 октября 2009

Какой метод (ы) можно использовать, чтобы попросить контейнер уведомить ваше приложение, когда время сеанса близится к таймауту? (Выберите все подходящие варианты)

A. HttpSessionListener.sessionDestroyed - правильно

B. HttpSessionBindingListener.valueBound

C. HttpSessionBindingListener.valueUnbound - исправьте, это своего рода обход, но если у вас есть класс атрибутов, это способ информирования о тайм-ауте

D. HttpSessionBindingEvent.sessionDestroyed - такого метода нет

Е. HttpSessionAttributeListener.attributeRemoved - удаление атрибута тесно не связано с тайм-аутом сеанса

F. HttpSessionActivationListener.sessionWillPassivate - пассивация сеанса отличается от тайм-аута

Я согласен с вариантом А.

1) Но С сомнительно

Как значение unbound может быть тесно связано с тайм-аутом сеанса. Это просто метод обратного вызова, когда атрибут удаляется.

2) и если C верен, E также должен быть верным.

HttpSessionAttributeListener - это просто класс, который хочет знать, когда какой-либо тип атрибута был добавлен, удален или заменен в сеансе. Реализуется любым классом.

HttpSessionBindingListener существует, так что сам атрибут может узнать, когда он был добавлен или удален из сеанса, и класс атрибута должен реализовать этот интерфейс для достижения этого.

Любые идеи ...

1 Ответ

0 голосов
/ 21 декабря 2010

Мое решение этой проблемы - использовать A. Помните, что HttpSessionListener.sessionDestroyed() вызывается до того, как сеанс признан недействительным, поэтому все его атрибуты не повреждены.

Наше приложение использует атрибут сеанса с ключом "LOGOUT" для обозначения явного выхода из системы. Поэтому ваш код может выглядеть примерно так:

public void sessionDestroyed(HttpSessionEvent se) {
    Object logout = se.getSession().getAttribute("LOGOUT");
    String username = (String)se.getSession().getAttribute("USERNAME");
    auditLog.info("User '" + username + "' " +
                 (logout == null ? "timed" : "logged") +
                 " out.");
}

Насколько я могу судить, из HttpSession нет стандартного способа узнать, почему он собирается быть признан недействительным, и, что удивительно, в объекте HttpSessionEvent нет информации, описывающей, что это было верно до Java EE 6 ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...