一尘不染

侦听tomcat领域身份验证事件

tomcat

我需要知道tomcat何时使用给定上下文的领域身份验证接受登录。我一直在寻找可用的可能的侦听器(ServletContextListener和ServletContextAttributeListener),但无法弄清楚登录时如何通知。当将tomcat单点登录用于多个上下文时,这也应该起作用。有任何想法吗?


阅读 247

收藏
2020-06-16

共1个答案

一尘不染

不幸的是,没有任何标准/抽象的方法可以使用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);
}
2020-06-16