Spring拦截器和过滤器的区别及详解
拦截器和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拦截器和过滤器的区别及详解相关推荐
- 详解拦截器和过滤器的区别
拦截器和过滤器的区别 过滤器和拦截器的区别: ①拦截器是基于java的反射机制的,而过滤器是基于函数回调. ②拦截器不依赖与servlet容器,过滤器依赖与servlet容器. ③拦截器只能对acti ...
- java 拦截器和过滤器的区别
介绍 在 Java Web 应用程序中,拦截器和过滤器是两种不同的机制,用于在请求/响应处理过程中进行拦截和过滤.两者都可以用来在请求到达目标资源之前对其进行预处理.修改或拦截. 但是,拦截器和过滤器 ...
- springboot拦截器和过滤器的区别与使用
拦截器与过滤器的区别 spring的拦截器与servlet的filter有相似之处,比如二者都是AOP编程思想的体现,都能实现权限检查.日志记录等,不同的是: 适用范围不同:filter是servle ...
- 拦截器和过滤器的区别 -- 简单分析篇
过滤器,是在Java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如过滤掉非法u ...
- 大剑无锋之拦截器和过滤器的区别【面试推荐】
①拦截器是基于java的反射机制的,而过滤器是基于函数回调. ②拦截器不依赖与servlet容器,过滤器依赖与servlet容器. ③拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求 ...
- Spring 拦截器和过滤器中自动注入为 null 的原因及解决方案
起因 开发过程中在过滤器(filter)中注入Bean出现空指针异常,通过查找资料了解空指针的原因,特此记录. 问题分析 由于其他bean在service,controller层注入一点问题也没有,开 ...
- Spring—拦截器和过滤器介绍
文章目录 介绍 过滤器(Filter) 拦截器(Interceptor) 包含关系 比较 关注微信公众号:CodingTechWork,一起学习进步. 介绍 过滤器(Filter) 过滤器是Java ...
- 关于SSM框架设置拦截器和过滤器
我们知道拦截器和过滤器都是在项目中起到拦截过滤请求的功能,所以可能在设置的时候会傻傻分不清.这里我们先来比较它们的区别. 过滤器Filter是JavaEE标准,在Servlet的规范中定义的,是Ser ...
- 区分Java拦截器和过滤器
今天带大家分析java拦截器和过滤器的区别,文中有非常详细的解释说明,对正在学习java的小伙伴们有很好的帮助,需要的朋友可以参考下 一.过滤器(filter) 过滤器处于客户端与Web资源(Serv ...
- struts2中拦截器和过滤器的比较
拦截器和过滤器的区别: 1.拦截器是基于java的反射机制的,而过滤器是基于函数回调 2.过滤器依赖与servlet容器,而拦截器不依赖与servlet容器 3.拦截器只能对action请求起作用,而 ...
最新文章
- javascript addEventListener()
- 基础SQL面试题(3)
- (转)nginx+iis实现负载均衡
- sqlite库——c语言实现匹配已知字符串中某个字段(该字段在其他表中),在其他表中获取值并显示
- Java mybatis实现mysql批量插入
- ES6/ES2015核心内容(上)
- 新手学习DaVinci笔记一:查找资料篇
- [BUUCTF-pwn]——[BJDCTF 2nd]rci
- Elasticsearch –使用模式替换过滤器和自定义分析器忽略查询中的特殊字符
- Oracle中备份用户对象的两种方法
- 【Flink】源码-Flink重启策略-简介 Task恢复策略 重启策略监听器
- itertools编程训练
- CentOS mysql常用命令
- 秒杀疯狂猜成语3 花花的3300个成语 包括C#源代码 交流
- 怎么出家ajax假死状态,Ajax如何解决假死?
- Android11/Android Q分屏功能实现
- redis关于hash的常用命令
- 读《如何有效阅读一本书:超实用笔记读书法》
- Python3+Flickrapi爬取图片
- 6 生僻字_又双叒叕,火炎焱燚......神曲《生僻字》原唱来了!
热门文章
- 电力系统微型计算机继电保护试题,浙江省2008年7月高等教育自学考试电力系统微型计算机继电保护试题课程代码02313...
- UE4教程:虚幻4引擎(Unreal Engine 4)学习指南
- Linux交叉编译FFmpeg
- 2022年最新的百度云盘在线倍速播放实践可用
- ad域管理与维护_自动化清理AD域中非活动用户
- 直播视频app源码从零搭建流媒体服务器+obs推流直播
- sqlsever2012评估期已过
- easydarwin
- easydarwin 安装_linux环境安装部署easydarwin流媒体服务器详细教程
- express-urlrewrite express url重写