博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
拦截器
阅读量:5306 次
发布时间:2019-06-14

本文共 1504 字,大约阅读时间需要 5 分钟。

一、什么是拦截器

Java里的拦截器是动态拦截action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行,同时也提供了一种可以提取action中可重用部分的方式。在AOP(Aspect-Oriented Programming)中拦截器用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。

二、为什么使用拦截器

如果具有这样一个需求,就是用户未登陆的拦截,接口的幂等性等,我们可以使用springmvc的拦截器为我们做到。实现接口HandlerInterceptor接口,需要实现3个方法,或者实现WebRequestInterceptor接口,需要实现的方法和介绍。

三、需要实现的方法

preHandler : 是controller的前置方法,当方法返回false整个请求就结束了。多个Interceptor,然后SpringMVC会根据声明的前后顺序一个接一个的执行,而且所有的Interceptor中的preHandle方法都会在。

WebRequestInterceptor和HandlerInterceptor的preHandler的方法的区别就在与webRepuestInterceptor的preHandler的方法是没有拦截的功能,是没有返回值的。

postHandle : 就是在当前请求进行处理之后,也就是Controller方法调用之后执行,但是它会在DispatcherServlet进行视图返回渲染之前被调用。

afterHandler:该方法将在整个请求结束之后,也就是在DispatcherServlet 渲染了对应的视图之后执行,可用于清理资源。

 

 

 

原理

大部分时候,拦截器方法都是通过代理的方式来调用的。Struts 2的拦截器实现相对简单。当请求到达Struts 2的ServletDispatcher时,Struts 2会查找配置文件,并根据其配置实例化相对的拦截器对象,然后串成一个列表(list),最后一个一个地调用列表中的拦截器。Struts2拦截器是可插拔的,拦截器是AOP的一种实现。Struts2拦截器栈就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,Struts2拦截器链中的拦截器就会按其之前定义的顺序

自定义

自定义一个拦截器需要三步:

1 .自定义一个实现Interceptor接口(或者继承自AbstractInterceptor)的类。

2 .在strutx.xml中注册上一步中定义的拦截器。

3 .在需要使用的Action中引用上述定义的拦截器,为了方便也可将拦截器定义为默认的拦截器,这样在不加特殊声明的情况下所有的Action都被这个拦截器拦截。

滤器区别

过滤器可以简单理解为"取你所想取",忽视掉那些你不想要的东西;拦截器可以简单理解为"拒你所想拒",关心你想要拒绝掉哪些东西,比如一个BBS论坛上拦截掉敏感词汇。

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

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

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

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

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

 

 

(部分内容参考百度网络)

 

转载于:https://www.cnblogs.com/weishenme/p/11271505.html

你可能感兴趣的文章
java中基本数据类型和包装类的区别
查看>>
项目指南
查看>>
康托展开
查看>>
JarvisOJ Basic Help!!
查看>>
MongoDB-CRUD
查看>>
ASM字节码增强技术
查看>>
javaagent 简介
查看>>
《Linux4.0设备驱动开发详解》笔记--第十四章:Linux网络设备驱动
查看>>
C++学习之智能指针
查看>>
python升级安装后的yum的修复
查看>>
答读者问(9):有关怎样看待学校的好坏及怎样应对毕业之前的迷茫等问题
查看>>
UVA 1664 Conquer a New Region (Kruskal,贪心)
查看>>
map/reduce函数
查看>>
第五式 单例模式
查看>>
UWP获取任意网页加载完成后的HTML
查看>>
SVN MERGE 和冲突
查看>>
uniqueidentifier 数据类型(转)
查看>>
Canvas学习笔记
查看>>
C语言-数据结构(一)
查看>>
Apache安装配置详解(Win平台下)
查看>>