精华内容
下载资源
问答
  • 过滤器和拦截器区别过滤器和拦截器区别过滤器和拦截器区别过滤器和拦截器区别过滤器和拦截器区别
  • 过滤器和拦截器区别

    2017-03-20 15:05:18
    1.拦截器是基于java反射机制的,而过滤器是基于函数回调的。 2.过滤器依赖于servlet容器,而拦截器不依赖于servlet容器。 3.拦截器只对action起作用,而过滤器几乎可以对所有请求起作用。 4.拦截器可以访问...

    1.拦截器是基于java反射机制的,而过滤器是基于函数回调的。

    2.过滤器依赖于servlet容器,而拦截器不依赖于servlet容器。

    3.拦截器只对action起作用,而过滤器几乎可以对所有请求起作用。

    4.拦截器可以访问action上下文、值栈里的对象,而过滤器不能。

    5.在action的生命周期里,拦截器可以多起调用,而过滤器只能在容器初始化时调用一次。

    展开全文
  • 过滤器和拦截器区别以及执行顺序

    千次阅读 2019-05-22 23:41:25
    过滤器和拦截器区别 觉得这个总结的很好,所以用来借鉴借鉴 摘抄于网络,侵删 过滤器和拦截器执行顺序 在SpringBoot中编写测试代码 自定义过滤器 /** * @Author: xiaoshijiu * @Date: 2019/5/22 * @...
    1. 过滤器和拦截器区别
      在这里插入图片描述在这里插入图片描述
      在这里插入图片描述
      觉得这个总结的很好,所以用来借鉴借鉴
      摘抄于网络,侵删

    2. 过滤器和拦截器执行顺序
      在SpringBoot中编写测试代码

      • 自定义过滤器
      /**
       * @Author: xiaoshijiu
       * @Date: 2019/5/22
       * @Description: 自定义过滤器
       */
      public class MyFilter extends HttpFilter {
          @Override
          public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                  throws IOException, ServletException {
              System.out.println("Filter----before");  
              chain.doFilter(request,response);
              System.out.println("Filter----after");
          }
      }
      
      • 自定义拦截器
        (有关SpringMVC的拦截器知识原理,可以参照我之前的博客)
        SpringMVC拦截器详解
        SpringMVC拦截器执行顺序原理解释

        /**
         * @Author: xiaoshijiu
         * @Date: 2019/5/22
         * @Description: $value$
         */
        public class MyInterception implements HandlerInterceptor {
            @Override
            public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
                    Object handler) throws Exception {
                System.out.println("Interception----before");
                return true;
            }
        
            @Override
            public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
                    ModelAndView modelAndView) throws Exception {
                System.out.println("Interception----before2");
            }
        
            @Override
            public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
                    Object handler, Exception ex) throws Exception {
                System.out.println("Interception----after");
            }
        }
        
        • 配置拦截器和过滤器
        /**
         * @Author xiaoshijiu
         * @Description 自定义Mvc配置,实现全面接管SpringMvc的配置
         * @Date 2019/5/13
         */
        @Configuration
        public class MyWebMvc implements WebMvcConfigurer {
            /**
             * 注册自定义的filter 就相当于在普通web工程中,在web.xml中注册的<filter></filter>
             */
            @Bean
            public FilterRegistrationBean myFilter() {
                return new FilterRegistrationBean(new MyFilter());
            }
        
            @Override
            public void addInterceptors(InterceptorRegistry registry) {
                // 添加自定义的拦截器
                registry.addInterceptor(new MyInterception()).addPathPatterns("/hello");
            }
        }
        
        • 编写Controller,测试
        /**
         * @Author: xiaoshijiu
         * @Date: 2019/5/22
         * @Description: 测试Controller
         */
        @RestController
        public class Mycontroller {
        
            @RequestMapping("hello")
            public String hello() {
                System.out.println("hello...来了");
                return "hello";
            }
        }
        
        • 打印结果
          在这里插入图片描述
          这里可以看到拦截器和过滤器的执行顺序,对照着上面他们的区别也是很好理解的
          总结一下,执行顺序
          在这里插入图片描述
          这里还有一个问题就是发送/hello请求filter被执行了两次,我们可以获取url来判别一下
          自定义过滤器添加代码
        		HttpServletRequest servletRequest = (HttpServletRequest) request;
                System.out.println(servletRequest.getRequestURI());
        

        可以看到SpringBoot项目会发送图标的请求(/favicon.ico)
        在这里插入图片描述
        最后在补充一下,request获取请求的一些方法的内容
        在这里插入图片描述

    展开全文
  • 过滤器Filter和拦截器Intercepter的区别拦截器是基于Java的反射机制的,而过滤器是基于函数回调。 拦截器不依赖于servlet容器,过滤器依赖于servlet容器。 拦截器只能对action请求起作用,而过滤器则可以对...

    过滤器Filter和拦截器Intercepter的区别:

    • 拦截器是基于Java的反射机制的,而过滤器是基于函数回调。
    • 拦截器不依赖于servlet容器,过滤器依赖于servlet容器。
    • 拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
    • 拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
    • 在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次
    • 拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。

    从灵活性上说拦截器功能更强大些,Filter能做的事情它都能做,而且可以在请求前,请求后执行,比较灵活。Filter主要是针对URL地址做一个编码的事情、过滤掉没用的参数、安全校验(比较泛的,比如登录不登录之类),太细的活儿还是建议用interceptor。具体还得根据不同情况选择合适的。
    图片描述
    执行顺序 :
    过滤前-----拦截前-----Action处理-----拦截后-----过滤后。
    个人认为过滤是一个横向的过程,首先把客户端提交的内容进行过滤(例如未登录用户不能访问内部页面的处理);过滤通过后,拦截器将进行用户提交数据的验证,做一些前期的数据处理;接着把处理后的数据发给对应的Action,Action处理完成返回后,拦截器还可以做些其他事情,再向上返回到过滤器的后续操作。

    图片描述


    动态代理和静态代理的区别:

    按照代理的创建时期,代理类可以分为两种: 

    静态:由程序员创建代理类或特定工具自动生成源代码再对其编译。在程序运行前代理类的.class文件就已经存在了。

    动态:在程序运行时运用反射机制动态创建而成。

    静态代理类优缺点

    优点:

    代理使客户端不需要知道实现类是什么,怎么做的,而客户端只需知道代理即可(解耦合),对于如上的客户端代码,newUserManagerImpl()可以应用工厂将它隐藏,如上只是举个例子而已。

    缺点:

    1)代理类和委托类实现了相同的接口,代理类通过委托类实现了相同的方法。这样就出现了大量的代码重复。如果接口增加一个方法,除了所有实现类需要实现这个方法外,所有代理类也需要实现此方法。增加了代码维护的复杂度。

    2)代理对象只服务于一种类型的对象,如果要服务多类型的对象。势必要为每一种对象都进行代理,静态代理在程序规模稍大时就无法胜任了。如上的代码是只为UserManager类的访问提供了代理,但是如果还要为其他类如Department类提供代理的话,就需要我们再次添加代理Department的代理类。

    动态代理优点:

    动态代理与静态代理相比较,最大的好处是接口中声明的所有方法都被转移到调用处理器一个集中的方法中处理(InvocationHandler.invoke)。这样,在接口方法数量比较多的时候,我们可以进行灵活处理,而不需要像静态代理那样每一个方法进行中转。而且动态代理的应用使我们的类职责更加单一,复用性更强


    •  
    展开全文
  • 过滤器和拦截器区别过滤器: Filter 拦截器:Interceptor 过滤器依赖与servlet容器,而拦截器是JavaEE标准  ①拦截器是基于java的反射机制的,而过滤器是基于函数回调。  ②拦截器不依赖与servlet容器,...

    springBoot项目配置过滤器(filter)拦截器(Interceptor)

    过滤器和拦截器的区别:

           过滤器: Filter  拦截器:Interceptor

           过滤器依赖与servlet容器,而拦截器是JavaEE标准

      ①拦截器是基于java的反射机制的,而过滤器是基于函数回调。
      ②拦截器不依赖与servlet容器,过滤器依赖与servlet容器。
      ③拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
      ④拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
      ⑤在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。

           ⑥拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。

    过滤器:

    触发时机不同:

      过滤器是在请求进入容器后,但请求进入servlet之前进行预处理的。请求结束返回也是,是在servlet处理完后,返回给前端之前。

    过滤器的触发时机是容器后,servlet之前,所以过滤器的doFilter(

    ServletRequest request, ServletResponse response, FilterChain chain

    )的入参是ServletRequest ,而不是httpservletrequest。因为过滤器是在httpservlet之前。

    过滤器Filter

     @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            System.out.println("before...");
            chain.doFilter(request, response);
            System.out.println("after...");
        }
    chain.doFilter(request, response);这个方法的调用作为分水岭。事实上调用Servlet的doService()方法是在chain.doFilter(request, response);这个方法中进行的。

    拦截器:

    1.过滤器是JavaEE标准,采用函数回调的方式进行。是在请求进入容器之后,还未进入Servlet之前进行预处理,并且在请求结束返回给前端这之间进行后期处理。

          只有在preHandle返回为true时才会执行到(controller接口方法、preHandle、afterCompletion)

          preHandle是在controller接口方法没有抛出异常时才会执行;afterCompletion在conroller接口方法抛出异常、正常执行都会执行(前提时preHandle返回为true)

           preHandle()这个方法是在过滤器的chain.doFilter(request, response)方法的前一步执行,也就是在 [System.out.println("before...")][chain.doFilter(request, response)]之间执行。

      preHandle()方法之后,在return ModelAndView之前进行,可以操控Controller的ModelAndView内容。

      afterCompletion()方法是在过滤器返回给前端前一步执行,也就是在[chain.doFilter(request, response)][System.out.println("after...")]之间执行。

    2.SpringMVC的机制是由同一个Servlet来分发请求给不同的Controller,其实这一步是在Servlet的service()方法中执行的。所以过滤器、拦截器、service()方法,dispatc()方法的执行顺序应该是这样的,大致画了个图:其实非常好测试,自己写一个过滤器,一个拦截器,然后在这些方法中都加个断点,一路F8下去就得出了结论。

    3.SpringMVC的机制是由同一个Servlet来分发请求给不同的Controller,其实这一步是在Servlet的service()方法中执行的。

    4.还有,拦截器是spring容器的,是spring支持的,

     

    总结:过滤器包裹住servlet,servlet包裹住拦截器。

    如下图所示:

     

    总结:拦截器功在对请求权限鉴定方面确实很有用处,在我所参与的这个项目之中,第三方的远程调用每个请求都需要参与鉴定,所以这样做非常方便,而且他是很独立的逻辑,这样做让业务逻辑代码很干净。和框架的其他功能一样,原理很简单,使用起来也很简单,大致看了下SpringMVC这一部分的源码,其实还是比较容易理解的。

      我们项目中仅仅用到了preHandle这个方法,而未用其他的,框架提供了一个已经实现了拦截器接口的适配器类HandlerInterceptorAdapter,继承这个类然后重写一下需要用到的方法就行了,可以少几行代码,这种方式Java中很多地方都有体现。

    https://www.cnblogs.com/panxuejun/p/7715917.html

    展开全文
  • 主要介绍了struts2过滤器和拦截器区别,简单分析了struts2框架中过滤器和拦截器的概念与相关使用区别,需要的朋友可以参考下
  • 过滤器和拦截器

    2019-07-04 18:30:27
    目录过滤器和拦截器过滤器和拦截器区别配置拦截器interceptor(实现登录模块拦截:无法从登录模块不经过登录直接跳转其他页面)配置过滤器filter(实现拦截页面) 过滤器和拦截器 过滤器和拦截器区别 java过滤...
  • struts2体系结构图: ...b) 初始到了servlet容器 传递给一个标准的过滤器链  c) FilterDispatecher会去查找相应的ActionMapper,如果找到了相应的ActionMapper它将会将控制权限交给ActionProxy  d) ActionProxy
  • 今天小编就为大家分享一篇详谈springboot过滤器和拦截器的实现及区别,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • javaweb中拦截器和过滤器区别

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 115,126
精华内容 46,050
关键字:

过滤器和拦截器的区别