收听tomcat领域认证事件

Ric*_*mon 2 java authentication tomcat

我需要知道tomcat何时接受针对给定上下文使用域认证的登录.我一直在寻找可用的可用侦听器(ServletContextListener和ServletContextAttributeListener),但无法弄清楚如何在登录时收到通知.对于多个上下文使用tomcat单点登录时,这也应该有效.有任何想法吗?

Bal*_*usC 7

不幸的是,使用Servlet 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);
}
Run Code Online (Sandbox Code Playgroud)