Форум программистов, компьютерный форум, киберфорум
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
149 / 162 / 48
Регистрация: 19.10.2012
Сообщений: 530

HttpSessionListener не срабатывает

22.09.2015, 15:57. Показов 2264. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Во время работы сервлета вообще не срабатывает WebListener

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
 
import org.apache.log4j.Logger;
 
@WebListener
public class SessionListener implements HttpSessionListener {
 
    private static int totalActiveSessions;
    
    private static final Logger log = Logger.getLogger(SessionListener.class);
    
    @Override
    public void sessionCreated(HttpSessionEvent se) {
        totalActiveSessions++;
        log.warn("sessionCreated add");
 
    }
 
    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        totalActiveSessions--;
        log.warn("sessionDestroyed delete");
 
    }
 
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.09.2015, 15:57
Ответы с готовыми решениями:

HttpSessionListener
Подскажите, плз, какое условие для срабатывания public void sessionDestroyed(HttpSessionEvent httpSessionEvent)? public class...

Проблема с HttpSessionListener...
Проблема такая: Создаю класс: package my; import javax.servlet.http.*; import javax.servlet.*; public final class...

Запрос срабатывает в SQL Server, но не корректно срабатывает в Visual Studio 2017
(SELECT ROW_NUMBER() over (ORDER BY AVG(Отметки.Отметка) DESC) ID, .ФИО, .Группа, Отметки., Отметки.Полугодие, AVG(Отметки.Отметка) AS...

17
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
22.09.2015, 16:09
Любопытный, в web.xml добавили его?

Добавлено через 1 минуту
а, у вас аннотация....хз. Не работал с ней. Попробуйте все же в web.xml определить если он у вас есть

Добавлено через 2 минуты
Любопытный, может просто логгер не настроен? (Кстати выводить эти сообщения уровнем warn - ошибка)
0
149 / 162 / 48
Регистрация: 19.10.2012
Сообщений: 530
22.09.2015, 16:14  [ТС]
KEKCoGEN,
Да, использую аннотации. web.xml отсутствует.
Логер настроен, в других позициях он срабатывает корректно, про варн знаю, просто скопипастил строку из другого места что бы проверить работу, на этом и застопорился.
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
22.09.2015, 16:15
Любопытный, а сессия точно создается? Бреикпоинт ставили там чтобы проверить что точно там не проходите?
Судя по гуглу никаких телодвижений кроме указания аннотации не требуется
0
149 / 162 / 48
Регистрация: 19.10.2012
Сообщений: 530
22.09.2015, 16:20  [ТС]
KEKCoGEN,
Да, в листенере ставил брекпоинт, он не срабатывает.
Как минимум после перезапуска приложения и входа 1го пользователя должна создаться сессия.
0
12 / 12 / 4
Регистрация: 17.12.2012
Сообщений: 71
22.09.2015, 22:03
Попробуйте вызвать getSession() у реквеста, это проинициализирует сессию и сработает листенер.
0
149 / 162 / 48
Регистрация: 19.10.2012
Сообщений: 530
23.09.2015, 12:38  [ТС]
Shpota,
Попробовал. getSession() обрабатывается, возвращает sessionId, но листенер все равно не отрабатывает.
Прошелся по механизму логина с анализатором трафика:
При первом входе на сервлет он мне возвращает ID новой сессии, после аутентификации получаю новый ID сессии.
После логаута ID остается прежним и переназначается после повторного логина.

Возможно требуется где то подружить листенер со Spring Security?

Добавлено через 4 часа 16 минут
Прошелся дебагером, насколько я понял при заходе в сервлет создается единственная сессия для текущего юзера, и впоследствии изменяется только ID этой сессии, session.getCreationTime() всегда остается неизменным, и равным времени первого входа в сервлет. Так ли это?
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
23.09.2015, 14:17
Цитата Сообщение от Любопытный Посмотреть сообщение
При первом входе на сервлет он мне возвращает ID новой сессии, после аутентификации получаю новый ID сессии.
После логаута ID остается прежним и переназначается после повторного логина.
Довольно странно. Обычно при входе на страницу логина (или любую неавторизованную страницу) создается новая анонимная сессия и выставляется её JSESSION_ID. После логина она умирает и создается новая, уже авторизованная. После логаута все повторяется. Сессия умирает и создается анонимная.

Может у вас с авторизацией проблемы какие то?
0
149 / 162 / 48
Регистрация: 19.10.2012
Сообщений: 530
23.09.2015, 14:46  [ТС]
KEKCoGEN,
Дело в том что меняется только JSESSION_ID, сама сессия остается прежней, если судить по времени создания сессии session.getCreationTime() до и после логина/логаута, и по session.isNew().

Может я не учел какие то механизмы в Spring Security?
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
23.09.2015, 15:04
Цитата Сообщение от Любопытный Посмотреть сообщение
если судить по времени создания сессии session.getCreationTime()
есть в 3+ спринге по-моему такая штука как session merge. Думаю поэтому не меняется getCreationTime(). Может на самом деле сессия не создается каждый раз.

Если почистить куки и зайти тоже не срабатывает лисенер?
0
149 / 162 / 48
Регистрация: 19.10.2012
Сообщений: 530
23.09.2015, 15:28  [ТС]
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
Если почистить куки и зайти тоже не срабатывает лисенер?
Не срабатывает. Даже когда первый раз захожу, когда точно создается сессия, он не отрабатывает.
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
23.09.2015, 15:32
Любопытный, попробуйте переведите логер в трейс и смотрите что пишет. Может там что нибудь будет.
0
149 / 162 / 48
Регистрация: 19.10.2012
Сообщений: 530
23.09.2015, 16:24  [ТС]
Сейчас этим и занимаюсь. Пока что ничего подозрительного не замечаю.
Цитата Сообщение от KEKCoGEN Посмотреть сообщение
После логаута все повторяется. Сессия умирает и создается анонимная.
Насчет этого, наткнулся только что на тему
The session will only be invalidated if the user tries to use it again after starting a new session, otherwise it will time out as normal. This is because it isn't possible to invalidate a session other than during a request made as part of that session. At least not without resorting to container-specific APIs.
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
23.09.2015, 16:35
Любопытный, есть спец. опция invalidate-session=true когда логаут делаешь

XML
1
<security:logout logout-success-url="/" invalidate-session="true"/>
0
149 / 162 / 48
Регистрация: 19.10.2012
Сообщений: 530
24.09.2015, 10:28  [ТС]
Нашел проблему в своем кастомном логауте, исправил, теперь при логауте создается новая сессия, с новым временем создания. Слушатель все так же не срабатывает.
Пробую вручную сделать invalidate и пересоздать сессию, опять не срабатывает. Пробую создать слушатель в другом приложении, не использующем Spring Security - там тоже не работает.
Возможна ли проблема с Boot'ом?
0
Эксперт Java
 Аватар для KEKCoGEN
2399 / 2224 / 565
Регистрация: 28.12.2010
Сообщений: 8,672
24.09.2015, 11:32
Любопытный, я бы добавил web.xml и посмотрел будет ли работать
0
31 / 31 / 34
Регистрация: 22.08.2014
Сообщений: 108
24.09.2015, 13:24
Любопытный, добрый день!
Наверное проще всего будет продебажить развертывание вашего приложения. Если вы используете, например, сервер приложений wildfly, то можно добавить provided зависимость в ваш проект (например):
XML
1
2
3
4
5
6
<dependency>
     <groupId>org.wildfly</groupId>
     <artifactId>wildfly-undertow</artifactId>
     <version>10.0.0.Beta2</version>
     <scope>provided</scope>
</dependency>
выкачать source code и уже там посмотреть как регистрируются Listener's, в том числе и ваш. И почему он может быть незарегистрирован.

Кстате говоря, аннотации @WebListener вполне достаточно в контексте >= EE6
0
149 / 162 / 48
Регистрация: 19.10.2012
Сообщений: 530
24.09.2015, 14:55  [ТС]
В общем так и не понял я почему слушатель не подхватывался спрингом.

Нашел на стаке способ ногой затолкать слушателя через бин регистрации слушателей.
Java
1
2
3
4
@Bean
public ServletListenerRegistrationBean<HttpSessionListener> sessionListener() {
    return new ServletListenerRegistrationBean<HttpSessionListener>(new sessionListener());
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import org.apache.log4j.Logger;
 
public class SessionListener implements HttpSessionListener{
    
    private static final Logger log = Logger.getLogger(SessionListener.class);  // Логгер
    
    @Override
    public void sessionCreated(HttpSessionEvent se) {
        log.debug("Session created. JSESSIONID="+se.getSession().getId());
    }
 
    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        log.debug("Session Destroyed. JSESSIONID="+se.getSession().getId());
    }
}
Осталось разобраться почему при логине не создается новая сессия а меняется айдишник у текущей.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.09.2015, 14:55
Помогаю со студенческими работами здесь

Таймер срабатывает раньше времени или вообще не срабатывает
Помогите, пожалуйста, разобраться, что нетак с таймером. Браузер Chrome При создании записи, создаётся заметка со следующими...

Не срабатывает js
Здравствуйте, нагуглил скрипт отправки данных на сервер без перезагрузки страницы, так же сообщения выводит сразу на страницу как в вк,...

Не срабатывает if
Почему-то не срабатывает if при условии, что мы ввели единицу. Подскажите, пожалуйста, в чем причина. #include &lt;iostream&gt; using...

Не срабатывает if
Если использовать /*if(videoHash = &quot;1&quot;) $('div.picture1').click();*/ if(videoHash = &quot;2&quot;) $('div.picture2').click(); ...

Не срабатывает Try Except
Доброго времени суток. Есть очень странная ситуация. Провожу подсчёт максимально возможного числа комбинаций. Дабы не выходить за...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru