是否在Servlet工作完成之前或之后执行了doFilter()?

Jer*_*ell 24 java servlets servlet-filters

所述javax.servlet.Filter的对象既可以用于认证(其中过滤器需要赶上请求需要做任何servlet工作之前)和XSLT转换(其中servlet需要被完全完成生成内容)一起使用.什么时候实际执行?

我知道这是依赖于实现的(在Web容器上),但这似乎是需要所有人解决的问题.

也许为Web容器的每个Filter注册设置一个配置选项?

额外:

什么控制过滤器执行的顺序?为什么FooFilter会在BarFilter之前执行?

Ric*_*oll 51

过滤器链实质上包装了servlet调用.链将处理所有链接,直到它到达"底部",然后允许servlet运行,然后反向返回链.例如,如果你有一个新的"示例过滤器",你的doFilter()方法可能如下所示:

public void doFilter(ServletRequest request,
      ServletResponse response, FilterChain chain) 
      throws IOException, ServletException {
// do pre-servlet work here
chain.doFilter(request, response);
// do post servlet work here

}
Run Code Online (Sandbox Code Playgroud)

  • @Jeremy RE:过滤器顺序:过滤器的应用顺序由它们在 web.xml 中的定义顺序定义 (2认同)