`
如若_晴
  • 浏览: 108167 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Java过滤器与SpringMVC拦截器之间的关系与区别

阅读更多
转载自:http://blog.csdn.net/chenleixing/article/details/44573495

今天学习和认识了一下,过滤器和SpringMVC的拦截器的区别,学到了不少的东西,以前一直以为拦截器就是过滤器实现的,现在想想还真是一种错误啊,而且看的比较粗浅,没有一个全局而又细致的认识,由于已至深夜,时间原因,我就把一些网友的观点重点摘录下来,大家仔细看后也一定会有一个比较新的认识(在此非常感谢那些大牛们的无私奉献,分享他们的经验与心得,才能让像我这样的小白有机会站一下你们这些巨人的肩膀,才能少走些弯路)。

  过滤器和拦截器的区别:
  ①拦截器是基于java的反射机制的,而过滤器是基于函数回调。
  ②拦截器不依赖与servlet容器,过滤器依赖与servlet容器。
  ③拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
  ④拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
  ⑤在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
  ⑥拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。
  写了点测试代码,顺便整理一下思路,搞清楚这几者之间的顺序:
  1.过滤器是JavaEE标准,采用函数回调的方式进行。是在请求进入容器之后,还未进入Servlet之前进行预处理,并且在请求结束返回给前端这之间进行后期处理。

    @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);这个方法中进行的。
  2.拦截器是被包裹在过滤器之中的。

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion");
    }

  a.preHandle()这个方法是在过滤器的chain.doFilter(request, response)方法的前一步执行,也就是在 [System.out.println("before...")][chain.doFilter(request, response)]之间执行。
  b.preHandle()方法之后,在return ModelAndView之前进行,可以操控Controller的ModelAndView内容。
  c.afterCompletion()方法是在过滤器返回给前端前一步执行,也就是在[chain.doFilter(request, response)][System.out.println("after...")]之间执行。
  3.SpringMVC的机制是由同一个Servlet来分发请求给不同的Controller,其实这一步是在Servlet的service()方法中执行的。所以过滤器、拦截器、service()方法,dispatc()方法的执行顺序应该是这样的,大致画了个图:其实非常好测试,自己写一个过滤器,一个拦截器,然后在这些方法中都加个断点,一路F8下去就得出了结论。
  


  总结:拦截器功在对请求权限鉴定方面确实很有用处,在我所参与的这个项目之中,第三方的远程调用每个请求都需要参与鉴定,所以这样做非常方便,而且他是很独立的逻辑,这样做让业务逻辑代码很干净。和框架的其他功能一样,原理很简单,使用起来也很简单,大致看了下SpringMVC这一部分的源码,其实还是比较容易理解的。
  我们项目中仅仅用到了preHandle这个方法,而未用其他的,框架提供了一个已经实现了拦截器接口的适配器类HandlerInterceptorAdapter,继承这个类然后重写一下需要用到的方法就行了,可以少几行代码,这种方式Java中很多地方都有体现。
以上部分是摘自神一样存在的博客,参考了一下这个帖子:http://haohaoxuexi.iteye.com/blog/1750680
大家还可以参考一下这个电子书的截图:


  • 大小: 125.8 KB
  • 大小: 105.4 KB
分享到:
评论

相关推荐

    过滤器与拦截器的区别

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

    spring mvc拦截器过滤json中的null值

    spring mvc拦截器,过滤json数据中的null值,将null变成空字符串,内含截图,及jar包

    完整版Java web开发教程PPT课件 Java开发进阶教程 第15章 springMvc核心对象拦截器(共26页).pptx

    完整版Java web开发教程PPT课件 Java开发进阶教程 第10章 过滤器、监听器、自定义标签(共19页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第11章 AJAX实现(共11页).pptx 完整版Java web开发教程PPT...

    SpringMVC讲义大全.docx

    SpringMVC框架概述: 介绍什么是...拦截器和过滤器: 介绍如何使用拦截器和过滤器来实现日志记录、权限验证等功能。 RESTful Web服务: 讲解如何使用SpringMVC开发RESTful风格的Web服务,支持HTTP方法、资源定位等。

    springmvc+hibernate+springframework+shiro+bootstrap

    此项目是自己做过的真实的项目 适合初学者 也适合 资深开发人员本框架基本架构是springmvc+hibernate+springframework+shiro+bootstrap,详细点说下吧。...过滤器,拦截器等丰富的技术,欢迎大家下载,共同学习!

    完整版Java web开发教程PPT课件 Java开发进阶教程 第14章 springMvc原理介绍及搭建(共15页).pptx

    完整版Java web开发教程PPT课件 Java开发进阶教程 第10章 过滤器、监听器、自定义标签(共19页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第11章 AJAX实现(共11页).pptx 完整版Java web开发教程PPT...

    java后台权限管理系统源码(spring boot+mvc+mybatis).zip

    项目基于jdk1.8整合了springboot+mvc+mybatis(通用mapper)+druid+jsp+bootstrap等技术,springboot+Listener(监听器),Filter(过滤器),Interceptor(拦截器),Servlet,springmvc静态资源,文件上传下载,多数据源切换,缓存...

    Java 权限管理系统 shiro + ssm实现

    项目基于jdk1.8整合了springboot+mvc+mybatis(通用mapper)+druid+jsp+bootstrap等技术,springboot+Listener(监听器),Filter(过滤器),Interceptor(拦截器),Servlet,springmvc静态资源,文件上传下载,多数据源切换,缓存...

    springmvc+hibernate 日志管理工具

    功能日志:基于java aop思想设计,通过Spring advisorAutoProxy(自动代理)实现controller过滤代理拦截,并提供拦截filter过滤,支持spring EL表达式。 数据日志:设计中提供数据日志注入接口,管理数据日志注入,...

    基于SSM+ECharts+jquery+bootstrap+jstl的高校科研管理系统

    运用到的知识点主要有,spring创建管理对象(使用注解创建对象)、springMVC的使用(拦截器的使用、过滤器的使用、转发与重定向、文件的上传与下载、)、ECharts显示各个模块的图形化信息、jquery获取dom节点的值,...

    简单spring mvc应用

    主要是对java spring,spring mvc等知识链条学习归纳,实现了前端jsp和后端spring交互的简单mvc应用,项目已经实现拦截器、过滤器和监听器,数据CURD简单操作,附mysql包。环境:开发工具-idea,mysql + java13 + ...

    整合springboot+mvc+mybatis(通用mapper)+druid+jsp+bootstrap实现权限管理文件上传下载多数据源切换等功能

    项目基于jdk1.8整合了springboot+mvc+mybatis(通用mapper)+druid+jsp+bootstrap等技术,springboot+Listener(监听器),Filter(过滤器),Interceptor(拦截器),Servlet,springmvc静态资源,文件上传下载,多数据源切换,缓存...

    Crm客户关系管理系统

    ● 使用拦截器过滤未登录用户请求 ; ● 借助Quartz 时钟调度框架实现流失客户数据定时筛选功能; ● 使用zTree完成权限的展示和echart完成报表统计展示; ● 系统引入分布式缓存Redis技术,实现项目缓存统一处理,...

    Spring全家桶课程 基础篇:Spring MVC快速开发 的源码

    内容概要:该资源是Spring全家桶视频课程的第二部分Spring MVC的源码,其对于Spring的最常用的基本功能,如:表单、国际化、过滤器、拦截器、log等都使用案例进行了说明,并且在最后通过一个贯穿前、中、后台的案例...

    AisMVC.zip

    我们团队开发web项目一般采用前后端分离,所以后端的的Controller层的功能仅仅只有提供ajax接口,页面集成后的跳转,过滤器和拦截器,所以我就想着自己写一款仿springmvc的mvc框架作为自己和团队以后的开发中小型项目的...

    zxs:洲鑫系统

    微服务-> springMVC rest定制属性-> json 客户监听器模式hystrix工作方式kafka kafka api 流简单实现验证别名注释注解派生aop切面,过滤器,拦截器安全resttemplate自定义restTemplate 拼写作用域resttemplate自定义...

    在Spring MVC或Spring Boot中使用Filter打印请求参数问题

    在Spring体系中,过滤器的定义我们一般采用继承OncePerRequestFilter的方式,当然也可以使用原始的Filter。 错误写法一: 如果不对request和response进行处理,使用伪代码采用如下写法打印请求和响应参数(注:此时...

    Spring in Action(第2版)中文版

    7.4.1代理springsecurity的过滤器 7.4.2处理安全上下文 7.4.3提示用户登录 7.4.4处理安全例外 7.4.5强制web安全性 7.4.6确保一个安全的通道 7.5视图层安全 7.5.1有条件地渲染内容 7.5.2显示用户身份验证信息...

    单点登录sso-shiro-cas-maven

    最后我们还需要在/spring-node-1/src/main/webapp/WEB-INF/web.xml 文件中配置相关的过滤器拦截全部请求 ``` xml <filter-name>shiroFilter <filter-class>org.springframework.web.filter....

Global site tag (gtag.js) - Google Analytics