FilterChain 用法
FilterChain
是 Servlet API 的一部分,它被用来调用一个 servlet 或者下一个 filter。在创建自定义的 filter 时,通常需要使用 FilterChain
。
当请求来时,servlet 容器将根据在 web.xml 文件或注解中定义的顺序调用 filter。每个 filter 都有机会阻止请求继续向下传递(例如,基于某种认证失败),或者通过调用 FilterChain.doFilter()
函数将请求传递给下一个 filter 或最终的 servlet。
下面是一个简单的 filter 示例:
@WebFilter(urlPatterns = {"/*"})
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// 进行 filter 初始化
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// 在此处可以进行前处理,如编码设置、安全检查等
chain.doFilter(request, response); // 将请求传递给下一个 filter 或 servlet
// 在此处可以进行后处理
}
@Override
public void destroy() {
// 进行 filter 销毁时的资源清理
}
}
在这个示例中,我们创建了一个实现 Filter
接口的类,并重写了 init()
, doFilter()
, 和 destroy()
方法。在 doFilter()
中,我们调用 chain.doFilter(request, response)
,以便将请求和响应对象传递给下一个 filter 或 servlet。这样,你就可以在请求到达 servlet 之前和之后执行一些处理逻辑,如安全检查、日志记录、编码设置等。