zoukankan      html  css  js  c++  java
  • Filter过滤器和Interceptor过滤器

    Filter过滤器

      过滤器Filter依赖于servlet容器,基于函数回调,他几乎可以对所有的请求进行过滤,过滤器只能在容器初始化的时候调用一次

    Inerceptor拦截器

      拦截器Inerceptor依赖于web框架,在SpringMVC中就依赖于SrpingMVC,在实现上基于java的反射机制实现,属于面向切面编程的一种运用。

    由于拦截器是基于web框架的调用,因此可以使用Spring的依赖注入进行一些业务操作。同时一个拦截器实例在一个Controller生命周期内可以多次调用,缺点就是拦截器只能对Controller请求进行拦截,对其他的一些访问比如静态资源访问的请求则没有办法进行拦截处理

    Filter过滤器实现

    @Configuration
    public class TestFilter implements Filter {
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            System.out.println("在DispatcherServlet之前执行");
            filterChain.doFilter(servletRequest,servletResponse);
            System.out.println("在返回给客户端之前执行,但是在Interceptor拦截器之后执行");
        }
    }

    fileterChain.doFilter()方法的作用:

      filter过滤器是以链表的形式进行调用的,配置了几个就有几个,一个个串联在一起,doFilter方法中的filterChain,doFilter方法的作用就是将请求转发给过滤器链表中的下一个过滤器如果没有下一个过滤器就会回到原本的过滤器如果不加filterChain,doFilter()方法就不会向下执行了。

    Interceptor拦截器代码实现

    @Component
    public class Interceptor1 implements HandlerInterceptor {
    
        public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
            System.out.println("1************在DispatcherServlet之前执行**********");
            return true;
        }
    
        public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception {
            System.out.println("1************在controller执行之后的DispatcherServlet之后执行**********");
        }
    
        public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
                throws Exception {
            System.out.println("1************在页面渲染完成返回给客户端之前执行**********");
        }
    }
    //配置拦截
    @Component
    public class WebMvcConfig implements WebMvcConfigurer { @Autowired private Interceptor1 interceptor1; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(interceptor1).addPathPatterns("/*"); } }
  • 相关阅读:
    eslint 的 env 配置是干嘛使的?
    cookie httpOnly 打勾
    如何定制 antd 的样式(theme)
    剑指 Offer 66. 构建乘积数组
    剑指 Offer 65. 不用加减乘除做加法
    剑指 Offer 62. 圆圈中最后剩下的数字
    剑指 Offer 61. 扑克牌中的顺子
    剑指 Offer 59
    剑指 Offer 58
    剑指 Offer 58
  • 原文地址:https://www.cnblogs.com/HQ0422/p/14272876.html
Copyright © 2011-2022 走看看