Спасибо за ваше время и ваши комментарии! После некоторого хорошего обсуждения я наконец нашел решение и делюсь им с вами.
В моем случае запрос / ответ поступают через RMOpenEJBFilter
. Поэтому, когда я объявил сессию недействительной в моем коде, он завершился с ошибкой RMOpenEJBFilter
, потому что его внутренний код обрабатывал сессию.
Так вот мое решение.
- Я создал один фильтр с именем
LogOutFilter
.
- в WEB.XML я поставил его перед
RMOpenEJBFilter
(для целей цепочки фильтров).
- в моем коде выхода я устанавливаю одну переменную в сеансе
request.getSession(false).setAttribute("InvalidateSession", true);
- поэтому, когда я нажимаю на кнопку выхода из системы, он устанавливает атрибут сеанса, а затем переходит к
RMOpenEJBFilter
, где обрабатывает запрос (до тех пор, пока время сеанса не станет недействительным). Теперь управление переходит к LogOutFilter
, где я сделал проверку, чтобы сделать сеанс недействительным.
if (httpRequest.getSession(false) != null && httpRequest.getSession(false).getAttribute("InvalidateSession") != null) {
httpRequest.getSession(false).invalidate();
}
А теперь работает нормально.
Надеюсь, мое решение достаточно хорошо, чтобы его приняли.
Не стесняйтесь обращаться ко мне за разъяснениями.
С уважением,
Махендра Атнерия
Мумбаи, Индия