首页 > 编程知识 正文

生命拦截器(过滤器怎么区分)

时间:2023-05-04 09:00:47 阅读:102821 作者:4500

背景

做过JavaWeb开发的对过滤器和拦截器肯定不会陌生,而且也会熟练的使用,但是关于过滤器和拦截器具体的区别和差异可能不是特别的了解,这篇文章就跟大家介绍下过滤器和拦截器的区别。

过滤器 Filter

首先介绍下什么是过滤器,过滤器英文叫过滤器,是JavaEE的标准,依赖于小型应用程序容器,使用的时候是配置在web.xml文件中的,可以配置多个,执行的顺序是根据配置顺序从上到下。常用来配置请求编码以及过滤一些非法参数,垃圾信息或者是网站登录验证码。

!-过滤器-

过滤器

过滤器名称/过滤器名称

筛选器类组织。弹簧框架。网络。过滤器。fndy/滤波器级

初始化参数

参数名编码/参数名

参数值Utf-8/参数值

/init-param

初始化参数

参数名强制编码/参数名

参数值真/参数值

/init-param

/filter

过滤映射

过滤器名称/过滤器名称

全球资源定位器(Uniform Resource Locator)模式/*/url模式

/filter-映射

!-过滤器端-

参考实现

导入javax。servlet。*;

导入javax。servlet。http。HttpServletrequest

导入javax。servlet。http。HttpServletResponse

导入Java。io。ioexception

导入Java。乌提尔。日期;

公共类验证码过滤器实现了筛选器{

公共void init(FilterConfig配置)引发了ServletException {

}

public void destroy(){ 0

}

public void doFilter(servlet请求servlet请求,

ServletResponse servletResponse,FilterChain filterChain)

引发IOException,ServletException {

httpersvletrequest请求=(httpersvletrequest)servlet请求;

httpersvletresponse=(httpersvletresponse)servlet响应;

字符串servlet路径=请求。getservlet路径();

//获取验证码

if(servlet路径。匹配('/验证码。jpg '){ 0

回应。setcontenttype(' image/JPEG ');

//禁止图像缓存。

response.setHeader('Pragma ','无缓存');

response.setHeader('缓存控制','无缓存');

回应。setdateheader(' Expires ',0);

//参数:宽、高、字符数、干扰量

CaptchaProductor vCode=新的captchproductor(70,30,4,75);

//根据代币保存验证码内容

captchlean bean=new captchlean();

比恩。SetCaptcha(VCode。GetCode());

bean.setCreateTime(新的date());

httpessionutils。setsessionvalue(请求,' sessionCaptcha ',bean);

vcode。写(回应。getoutputstream());

返回;

}

}

}

过滤器的实现可以通过实现过滤器接口或者继承春天的组织。弹簧框架。网络。过滤器。onceperrequestfilter来实现。

拦截器 Interceptor

拦截器拦截机不依赖小型应用程序容器,依赖春天等网框架,在SpringMVC框架中是配置在SpringMVC的配置文件中,在回弹项目中也可以采用注解的形式实现。拦截器是面向切面编程的一种应用,底层采用Java 语言(一种计算机语言,尤用于创建网站)语言(一种计算机语言,尤用于创建网站)的反射机制来实现的。与过滤器一个很大的区别是在拦截器中可以注入春天的比恩,能够获取到各种需要的服务来处理业务逻辑,而过滤器则不行。

!-拦截器-

MVC :拦截器

!-多个拦截器,顺序执行-

豆类=' com。测试。管理员。拦截者。auth interceptor “/

/MVC :拦截器

参考实现

公共类AuthInterceptor扩展了HandlerInterceptorAdapter {

@覆盖

公共无效的后句柄(HttpServletrequest请求、HttpServletResponse响应、对象处理程序、模型和视图模型和视图)引发异常(

//todo

super.postHandle(请求、响应、处理程序、模型和视图);

}

@覆盖

公共布尔预处理程序(HttpServletRequest请求,HttpServletResponse响应,对象处理程序)引发异常{

//todo

返回super.preHandle(请求、响应、处理程序);

}

@覆盖

公共完成后作废(HttpServletrequest请求,HttpServletResponse响应,对象处理程序,异常ex)引发异常{

}

}

拦截器可以通过继承org . spring framework . web . servlet . handler . handlerinterceptoradapter来实现;去实现。

执行顺序

因为我们可以配置多个过滤器和拦截器,它们的执行顺序是什么?

过滤器的执行顺序与web.xml中的配置顺序有关,首先执行第一个配置,但并不意味着最后一个过滤器完成后会执行下一个。他们通过链条被处决。我画了一个过滤器和拦截器具体执行过程的图,可以看一下。

小结

今天,我们简单介绍了过滤器和拦截器的区别和使用,希望对大家有所帮助。平时这些东西可能是团队领导或者架构师搭建的,他们只关注业务逻辑,但是很多时候我们还是需要知道为什么,多了解一下对我们很有帮助。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。