2009-10-08 1 views
0

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

А. HttpSessionListener.sessionDestroyed - правильный

B. HttpSessionBindingListener.valueBound

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

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

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

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

Я согласен с опцией А.

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

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

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

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

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

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

ответ

0

Мое решение этой проблемы заключается в использовании 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).

Смежные вопросы