Мне нужно знать, когда tomcat принимает логин, используя аутентификацию в режиме реального времени для данного контекста. Я смотрел доступные слушатели (ServletContextListener и ServletContextAttributeListener), но не могу понять, как получать уведомления при входе в систему. Это также должно работать при использовании однократного входа tomcat для нескольких контекстов. Есть идеи?Слушайте события аутентификации домена tomcat
2
A
ответ
7
К сожалению, нет стандартного/абстрактного способа привязки к нему с использованием API сервлета. Вам нужно либо написать конкретную логику приложений, либо реализовать глобальный фильтр, который проверяет HttpServletRequest#getUserPrincipal()
каждый раз. Например:
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) {
HttpServletRequest request = (HttpServletRequest) req;
Principal user = request.getUserPrincipal();
HttpSession session = request.getSession(false);
if (user != null && (session == null || session.getAttribute("user") == null)) {
request.getSession().setAttribute("user", user);
// First-time login. You can do your intercepting thing here.
}
chain.doFilter(req, res);
}
1
Если у вас есть доступ к конфигурации сервера, попробуйте написать LifecycleListener (http://tomcat.apache.org/tomcat-6.0-doc/api/org/apache/catalina/LifecycleListener.html), которые настроены на сервере (см. Файлы конфигурации сервера tomcat для вашей версии).
Не уверен, что это будет трюк или нет, но хорошее место для проверки.
Удачи.
Смежные вопросы
- 1. Слушайте события виджета ckeditor
- 2. Магистраль Слушайте события Backbone.history
- 3. Слушайте события игрока YouTube
- 4. Слушайте события ActivityManager?
- 5. Слушайте новые события календаря
- 6. Слушайте WM_SYSCOMMAND События
- 7. Слушайте любые события
- 8. Слушайте события календаря Android
- 9. Слушайте приложение пробуждение события/график события пробуждения
- 10. Основы JavaScript: слушайте пользовательские события?
- 11. Слушайте, если отправлено 2 события
- 12. Слушайте события браузера в протрансформаторе
- 13. Слушайте события на связыванию данных
- 14. Слушайте события в другом приложении
- 15. Слушайте события внутри нескольких функций
- 16. Слушайте конкретные события унаследованных классов
- 17. Слушайте пользовательские события в Vue.js
- 18. Слушайте события из загруженного SWF?
- 19. Ошибка аутентификации домена с Kerberos
- 20. Tomcat - Слушайте на двух портах для тестирования
- 21. tomcat cookie проверка домена
- 22. Слушайте события keydown в iframe с кросс-доменом
- 23. Слушайте события от динамически созданных компонентов
- 24. Слушайте события из прелоадер в гибких
- 25. API Google Earth: Слушайте события TourPlayer
- 26. Слушайте события касания в фоновом режиме
- 27. Слушайте события в IFRAME от родителей
- 28. Слушайте ключевые события внутри партитур AngularJS
- 29. Слушайте другие события приложения на корневом устройстве
- 30. Слушайте события из программно созданного NSView
Это похоже на то, что мне нужно. Как насчет выхода из системы? возможно, глядя на событие окончания сеанса? – rmarimon
Если '' HttpSession # invalidate() 'используется для выхода из системы, то вы действительно можете подключиться к' HttpSessionListener # sessionDestroyed() 'и проверить, есть ли атрибут' user'. – BalusC
Я использовал 'httpRequest.getSession (false)', чтобы предотвратить расточительное создание сеанса. –