Java Servlet筛选器无法正常运行

Java Servlet筛选器无法正常运行,java,servlet-filters,Java,Servlet Filters,经过一些研究和尝试,我发现了一个新的方法,它允许我以编程方式添加servlet过滤器,同时不使用web.xml和注释而按需要保留它们的顺序。根据找到的方法,过滤器无法正常工作,据我所知,它由。从我的日志中,从未执行过过滤器链调用的步骤5、6和7 成功启动web应用程序上下文时: GodFilter.init Filter1.init Filter2.init ... FilterFinal.init 浏览web应用程序时: GodFilter.doFilter Filter1.doFilter

经过一些研究和尝试,我发现了一个新的方法,它允许我以编程方式添加servlet过滤器,同时不使用web.xml和注释而按需要保留它们的顺序。根据找到的方法,过滤器无法正常工作,据我所知,它由。从我的日志中,从未执行过过滤器链调用的步骤5、6和7

成功启动web应用程序上下文时:

GodFilter.init
Filter1.init
Filter2.init
...
FilterFinal.init
浏览web应用程序时:

GodFilter.doFilter
Filter1.doFilter
GodFilterChain.doFilter
Filter2.doFilter
GodFilterChain.doFilter
...
FilterFinal.dofilter
MyServlet.service(ServletRequest request, ServletResponse response)
MyServlet.service(HttpServletRequest request, HttpServletResponse response)
MyServlet.getLastModified
MyServlet.doGet
至少,我希望在
MyServlet.doGet
之后看到
GodFilter.doFilter
(根据过滤器链调用的步骤5、6和7),但它没有出现。我是否遗漏了什么或误解了servlet过滤器链的工作原理?
GodFilter
类是否不正确

蒂亚

[编辑1]

我忘了提到,
GodFilter
是通过实现
ServletContainerInitializer
的类加载的:

FilterRegistration fr = context.addFilter(GodFilter.class.getSimpleName(), GodFilter.class);
fr.addMappingForUrlPatterns(EnumSet.of( //
        DispatcherType.ASYNC, //
        DispatcherType.ERROR, //
        DispatcherType.FORWARD, //
        DispatcherType.INCLUDE, //
        DispatcherType.REQUEST), false, "/*");
fr.setInitParameter("param1", "value1");
Filter1.doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
    // pre chain processing 

    // if filter is last in filter chain, then mapped servlet will process hereafter
    chain.doFilter(request, response);

    // post chain processing
}

我尝试了
isMatchedAfter
也为true,但没有任何更改。

在查看了我的一些过滤器代码后,我发现我遗漏了
post.doFilter(请求、响应)
处理中
Filter.doFilter
的关键部分:

FilterRegistration fr = context.addFilter(GodFilter.class.getSimpleName(), GodFilter.class);
fr.addMappingForUrlPatterns(EnumSet.of( //
        DispatcherType.ASYNC, //
        DispatcherType.ERROR, //
        DispatcherType.FORWARD, //
        DispatcherType.INCLUDE, //
        DispatcherType.REQUEST), false, "/*");
fr.setInitParameter("param1", "value1");
Filter1.doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
    // pre chain processing 

    // if filter is last in filter chain, then mapped servlet will process hereafter
    chain.doFilter(request, response);

    // post chain processing
}