过滤器和拦截器 - 对web请求的影响

本文介绍了Filter过滤器和Interceptor拦截器在Web请求中的作用。Filter是Servlet规范的一部分,先于Interceptor执行,常用于登录验证、字符编码转换等。Interceptor则属于Spring MVC,用于拦截URL,具有preHandle、postHandle和afterCompletion三个关键方法,适用于权限检查和请求计时等场景。
摘要由CSDN通过智能技术生成

过滤器优先于拦截器,过滤功能定义你希望执行的内容,拦截功能定义你想干预或者想中止的内容。

 

Filter过滤器

Filter是servlet规范定义的,不属于spring框架,拦截请求数据,相比较拦截器更粗粒。Filter有FilterChain概念,一个FilterChain包含多个Filter,在客户端请求request到达servlet之前会经过Filter,过滤通过后才会进行后续操作,同样在操作完成返回给客户端时,也会经过Filter过滤。

1. Filter实现

过滤器实现Filter接口,实现init(),doFilter(),destroy()方法

  • Init(),web程序加载时执行,例如Tomcat服务启动时调用
  • doFilter(),每次客户端发起请求时均会调用
  • destory(),web程序卸载时执行,一般用于容器释放

使用场景:

  • 例如过滤请求资源走登录验证等,过滤非法请求
  • 字符编码转换等
  • 详细记录某些特殊的用户请求操作日志

Interceptor拦截器

1. HandlerInterceptor拦截器

属于SpringMVC项目中的拦截器,拦截请求中的地址url。

实现方法有

  • preHandle()

* 该方法在Controller处理之前调用
* 若存在多个HanderInterceptor,SpringMVC会按照声明的顺序进行执行preHandler
* preHandler返回false时,整个链路中断

  • postHandle()

* 该方法只有在preHandler方法返回true才会执行
* Controller执行之后,DispatcherServlet视图渲染之前 执行,即这个方法可以对ModelAndView进行操作
* 若存在多个HanderInterceptor,则声明在前的反而是最后执行,与preHandler执行相反

  • afterCompletion()

* 该方法只有在preHandler方法返回true才会执行
* Controller执行之后,DispatcherServlet视图渲染之后 执行,即整个请求资源完成后执行,主要用于资源清理

实现方式有:

  • 实现HandlerInterceptor接口
  • 继承HandlerInterceptorAdapter类

HandlerInterceptorAdapte声明了HandlerInterceptor接口中所有方法的默认实现,在继承时只需要重写方法即可

使用场景:

  • 想拦截计算统计请求的用时
  • 想拦截检查请求是否有权限

2. MethodInterceptor拦截器

属于AOP项目中的拦截器,拦截请求中的方法。在HandlerInterceptor拦截器后执行。

实现方式有:

  • 实现Methodinterceptor接口
  • 使用@Aspect注解或者配置

使用场景:

  • 想在方法执行前或后进行某些操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值