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

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注解或者配置
使用场景:
- 想在方法执行前或后进行某些操作
本文介绍了Filter过滤器和Interceptor拦截器在Web请求中的作用。Filter是Servlet规范的一部分,先于Interceptor执行,常用于登录验证、字符编码转换等。Interceptor则属于Spring MVC,用于拦截URL,具有preHandle、postHandle和afterCompletion三个关键方法,适用于权限检查和请求计时等场景。

447

被折叠的 条评论
为什么被折叠?



