Filter -> Servlet -> Interceptor -> Controller -> Interceprot -> Servlet -> Filter
过滤器 Filter:
基于函数回调,使用责任链模式。
每个 Filter 中会保存下一个 Filter 的引用,在 doFilter 的时候,可以选择是否要调用下一个 Filter。
而最后一个 Filter 应该接着 Servlet。
依赖于 Servlet 容器,比如 Tomcat,需要容器去完成 Filter 的实现
Demo:
创建 javax.servlet.Filter 的实现类,覆写三个方法:
@Component
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("MyFilter init");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("MyFilter doFilter");
chain.doFilter(request, response);
System.out.println("MyFilter doFilter");
}
@Override
public void destroy() {
System.out.println("MyFilter destroy");
}
}
@Configuration
public class FilterConfig {
}
拦截器 Interceptor:
基于 Java 的反射机制