Прослушайте события аутентификации в tomcat realm - PullRequest
2 голосов
/ 12 ноября 2009

Мне нужно знать, когда tomcat принимает вход в систему с использованием аутентификации области для данного контекста. Я просматривал возможные доступные слушатели (ServletContextListener и ServletContextAttributeListener), но не могу понять, как получать уведомления при входе в систему. Это также должно работать при использовании единого входа tomcat для нескольких контекстов. Есть идеи?

Ответы [ 2 ]

7 голосов
/ 12 ноября 2009

К сожалению, нет стандартного / абстрактного способа подключить его с помощью Servlet API. Вам нужно либо написать специфическую логику для сервера приложений, либо реализовать глобальный фильтр, который проверяет HttpServletRequest#getUserPrincipal() каждый раз. E.g.:

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 голос
/ 12 ноября 2009

Если у вас есть доступ к конфигурации сервера, вы можете попробовать написать LifecycleListener (http://tomcat.apache.org/tomcat-6.0-doc/api/org/apache/catalina/LifecycleListener.html),, настроенный для сервера (см. Документацию по настройке сервера tomcat для вашей версии).

Не уверен, что это подойдет, или нет, но хорошее место для проверки.

Удачи.

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