如何以编程方式获取 servlet 过滤器实例?

How can I programatically obtain a servlet filter instance?

我有一个 class MyFilter 实现了 javax.servlet.Filter。 Tomcat 基于 web.xml 配置创建它的单个实例。过滤器收集有关所有请求的统计信息(自应用程序启动以来)并将它们存储在成员变量中。

我希望在网页上显示这些统计信息。如何获取由Tomcat创建的MyFilter实例?

引用自documentation

Every Filter has access to a FilterConfig object from which it can obtain its initialization parameters, a reference to the ServletContext which it can use.

为什么不把你需要的数据存储在ServletContext属性中呢?您可以按如下方式存储过滤器:

@Override
public void init( final FilterConfig config ) throws ServletException
{
    // Store our instance in the servlet context for usage by servlets.
    final ServletContext context = config.getServletContext();
    context.setAttribute( "MyFilter", this );
}

然后在具有相同上下文的 servlet 中:

Filter filter = (Filter)getServletContext().getAttribute( "MyFilter" );