Filter -> Servlet -> Interceptor -> Controller -> Interceprot -> Servlet -> Filter

过滤器 Filter:

基于函数回调,使用责任链模式
每个 Filter 中会保存下一个 Filter 的引用,在 doFilter 的时候,可以选择是否要调用下一个 Filter。
而最后一个 Filter 应该接着 Servlet。

依赖于 Servlet 容器,比如 Tomcat,需要容器去完成 Filter 的实现

Demo:

创建 javax.servlet.Filter 的实现类,覆写三个方法:

  1. @Component
  2. public class MyFilter implements Filter {
  3. @Override
  4. public void init(FilterConfig filterConfig) throws ServletException {
  5. System.out.println("MyFilter init");
  6. }
  7. @Override
  8. public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
  9. throws IOException, ServletException {
  10. System.out.println("MyFilter doFilter");
  11. chain.doFilter(request, response);
  12. System.out.println("MyFilter doFilter");
  13. }
  14. @Override
  15. public void destroy() {
  16. System.out.println("MyFilter destroy");
  17. }
  18. }
  1. @Configuration
  2. public class FilterConfig {
  3. }

拦截器 Interceptor:

基于 Java 的反射机制