拦截器和filter的功能都是拦截,filter是在servlet前执行的,拦截器拦截的是Spring MVC定义的概念。过滤器中包含拦截器,发送一个请求,先进行过滤器处理,看程序是否受理该请求。过滤器放过后,程序中的拦截器再进行处理。

 1. 拦截器(Interceptor)

拦截器它是链式调用,一个应用中可以同时存在多个拦截器Interceptor,一个请求也可以触发多个拦截器,而每个拦截器的调用会依据它的声明顺序依次执行。spring中拦截器主要分两种:HandlerInterceptor和MethodInterceptor。

1.1 HandlerInterceptor拦截方式--HandlerInterceptor是springMVC中的拦截器,它拦截的目标是请求的地址,比MethodInterceptor先执行。其工作原理是当请求来时先进性预处理。HandlerInterceptoer拦截的是请求地址,所以针对请求地址做一些验证、预处理等操作比较合适

1.1.1 下面用代码进行展示:编写一个简单的拦截器处理类,请求的拦截是通过HandlerInterceptor 来实现

/*** preHandle() :这个方法将在请求处理之前进行调用。如果该方法的返回值为false ,将视为当前请求结束,不仅自身的拦截器会失效,还会导致其他的拦截器也不再执行。* postHandle():只有在 preHandle() 方法返回值为true 时才会执行。会在Controller 中的方法调用之后,DispatcherServlet 返回渲染视图之前被调用。* afterCompletion():只有在 preHandle() 方法返回值为true 时才会执行。在整个请求结束之后, DispatcherServlet 渲染了对应的视图之后执行。*/
@Component
public class MyControllerInterceptor implements HandlerInterceptor {/*** 在controller调用之前执行*/public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {String string1 = request.getParameter("string1");if(string1.equals("123")){return true;}System.out.println(request.getRequestURI()+"开始执行");return false;}/*** 在controller调用中执行*/public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)throws Exception {}/*** 在controller调用后执行*/public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)throws Exception {System.out.println(request.getRequestURI()+"执行结束");}
}

1.1.2 将自定义好的拦截器处理类进行注册,并通过addPathPatterns、excludePathPatterns等属性设置需要拦截或需要排除的 URL。

@Configuration
public class IntercepterConfig implements WebMvcConfigurer {@Autowiredprivate MyControllerInterceptor myControllerInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {//addPathPatterns用于添加拦截路径    /**表示拦截所有的路径//excludePathPatterns用于添加不拦截的路径registry.addInterceptor(myControllerInterceptor).addPathPatterns("/test1/**");}//此方法用于配置静态资源路径@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/**").addResourceLocations("classpath:/mapper/");}
}

1.2 MethodInterceptor拦截方式--MethodInterceptor是AOP项目中的拦截器,它拦截的目标是方法,常用AOP。这里就不过多的介绍了。

2. 过滤器(filter)

过滤器的配置,直接实现Filter接口,也可以通过@WebFilter注解实现对特定URL拦截

下面用代码进行展示:

@Component
public class MyFilter implements Filter {/*** init() :该方法在tomcat容器启动初始化过滤器时被调用,它在 Filter 的整个生命周期只会被调用一次。* doFilter() :容器中的每一次请求都会调用该方法, FilterChain(放行) 用来调用下一个过滤器 Filter。* destroy(): 当容器销毁过滤器实例时调用该方法,在方法中销毁或关闭资源,在过滤器 Filter 的整个生命周期也只会被调用一次。*/@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("Filter 前置");}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("Filter 处理中");filterChain.doFilter(servletRequest, servletResponse);}@Overridepublic void destroy() {System.out.println("Filter 后置");}
}

过滤器和拦截器的区别总结:

(1)拦截器是基于java的反射机制,过滤器是基于函数回调。
(2)Filter是依赖于Servlet容器,属于Servlet规范的一部分,而拦截器则是独立存在的,可以在任何情况下使用。
(3)Filter的生命周期由Servlet容器管理,而拦截器则可以通过IoC容器来管理,因此可以通过注入等方式来获取其他Bean的实例,因此使用会更方便。

Spring拦截器和过滤器的区别及详解相关推荐

  1. 详解拦截器和过滤器的区别

    拦截器和过滤器的区别 过滤器和拦截器的区别: ①拦截器是基于java的反射机制的,而过滤器是基于函数回调. ②拦截器不依赖与servlet容器,过滤器依赖与servlet容器. ③拦截器只能对acti ...

  2. java 拦截器和过滤器的区别

    介绍 在 Java Web 应用程序中,拦截器和过滤器是两种不同的机制,用于在请求/响应处理过程中进行拦截和过滤.两者都可以用来在请求到达目标资源之前对其进行预处理.修改或拦截. 但是,拦截器和过滤器 ...

  3. springboot拦截器和过滤器的区别与使用

    拦截器与过滤器的区别 spring的拦截器与servlet的filter有相似之处,比如二者都是AOP编程思想的体现,都能实现权限检查.日志记录等,不同的是: 适用范围不同:filter是servle ...

  4. 拦截器和过滤器的区别 -- 简单分析篇

    过滤器,是在Java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如过滤掉非法u ...

  5. 大剑无锋之拦截器和过滤器的区别【面试推荐】

    ①拦截器是基于java的反射机制的,而过滤器是基于函数回调. ②拦截器不依赖与servlet容器,过滤器依赖与servlet容器. ③拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求 ...

  6. Spring 拦截器和过滤器中自动注入为 null 的原因及解决方案

    起因 开发过程中在过滤器(filter)中注入Bean出现空指针异常,通过查找资料了解空指针的原因,特此记录. 问题分析 由于其他bean在service,controller层注入一点问题也没有,开 ...

  7. Spring—拦截器和过滤器介绍

    文章目录 介绍 过滤器(Filter) 拦截器(Interceptor) 包含关系 比较 关注微信公众号:CodingTechWork,一起学习进步. 介绍 过滤器(Filter) 过滤器是Java ...

  8. 关于SSM框架设置拦截器和过滤器

    我们知道拦截器和过滤器都是在项目中起到拦截过滤请求的功能,所以可能在设置的时候会傻傻分不清.这里我们先来比较它们的区别. 过滤器Filter是JavaEE标准,在Servlet的规范中定义的,是Ser ...

  9. 区分Java拦截器和过滤器

    今天带大家分析java拦截器和过滤器的区别,文中有非常详细的解释说明,对正在学习java的小伙伴们有很好的帮助,需要的朋友可以参考下 一.过滤器(filter) 过滤器处于客户端与Web资源(Serv ...

  10. struts2中拦截器和过滤器的比较

    拦截器和过滤器的区别: 1.拦截器是基于java的反射机制的,而过滤器是基于函数回调 2.过滤器依赖与servlet容器,而拦截器不依赖与servlet容器 3.拦截器只能对action请求起作用,而 ...

最新文章

  1. javascript addEventListener()
  2. 基础SQL面试题(3)
  3. (转)nginx+iis实现负载均衡
  4. sqlite库——c语言实现匹配已知字符串中某个字段(该字段在其他表中),在其他表中获取值并显示
  5. Java mybatis实现mysql批量插入
  6. ES6/ES2015核心内容(上)
  7. 新手学习DaVinci笔记一:查找资料篇
  8. [BUUCTF-pwn]——[BJDCTF 2nd]rci
  9. Elasticsearch –使用模式替换过滤器和自定义分析器忽略查询中的特殊字符
  10. Oracle中备份用户对象的两种方法
  11. 【Flink】源码-Flink重启策略-简介 Task恢复策略 重启策略监听器
  12. itertools编程训练
  13. CentOS mysql常用命令
  14. 秒杀疯狂猜成语3 花花的3300个成语 包括C#源代码 交流
  15. 怎么出家ajax假死状态,Ajax如何解决假死?
  16. Android11/Android Q分屏功能实现
  17. redis关于hash的常用命令
  18. 读《如何有效阅读一本书:超实用笔记读书法》
  19. Python3+Flickrapi爬取图片
  20. 6 生僻字_又双叒叕,火炎焱燚......神曲《生僻字》原唱来了!

热门文章

  1. 电力系统微型计算机继电保护试题,浙江省2008年7月高等教育自学考试电力系统微型计算机继电保护试题课程代码02313...
  2. UE4教程:虚幻4引擎(Unreal Engine 4)学习指南
  3. Linux交叉编译FFmpeg
  4. 2022年最新的百度云盘在线倍速播放实践可用
  5. ad域管理与维护_自动化清理AD域中非活动用户
  6. 直播视频app源码从零搭建流媒体服务器+obs推流直播
  7. sqlsever2012评估期已过
  8. easydarwin
  9. easydarwin 安装_linux环境安装部署easydarwin流媒体服务器详细教程
  10. express-urlrewrite express url重写