代码之家  ›  专栏  ›  技术社区  ›  Ricardo Marimon

侦听Tomcat领域身份验证事件

  •  2
  • Ricardo Marimon  · 技术社区  · 15 年前

    我需要知道Tomcat何时接受对给定上下文使用领域认证的登录。我一直在寻找可能的监听器(servletcontextlistener和servletcontextattributelistener),但不知道如何在登录时得到通知。对于多个上下文使用Tomcat单一登录时,这也应该有效。有什么想法吗?

    2 回复  |  直到 9 年前
        1
  •  7
  •   BalusC    9 年前

    不幸的是,没有标准/抽象的方法可以使用servlet API来钩住它。您需要编写特定于AppServer的逻辑,或者实现检查 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);
    }
    
        2
  •  1
  •   cjstehno    15 年前

    如果您有权访问服务器配置,可以尝试编写LifecycleListener( http://tomcat.apache.org/tomcat-6.0-doc/api/org/apache/catalina/LifecycleListener.html ,它与服务器一起配置(请参阅Tomcat服务器配置文档了解您的版本)。

    不确定它是否会起作用,但它是一个很好的检查场所。

    祝你好运。