2023-01-21
一、拦截器与过滤器的区别
1、过滤器(Filter)属于web服务器组件
(1)过滤器主要作用:过滤Servlet请求
(2)执行时机:两处执行时机(Servlet前、Servlet后)
2、拦截器(Interceptor)属于框架(springMVC)
(1)拦截器主要作用:拦截Controller请求
(2)执行时机:三处执行时机
①执行DispatcherServlet之后,Controller之前
②执行Controller之后,DispatcherServlet之前
③执行DispatcherServlet之后
二、拦截器概述
1、SpringMVC可以使用拦截器实现拦截Controller请求,用户可以自定义拦截器来实现特定功能
2、实现拦截器两种方式
(1)实现接口:HandlerInterceptor
(2)继承适配器类:HandlerInterceptorAdapter
3、拦截器中三个方法
(1)preHandler():这个方法在业务处理器处理请求之前被调用,可以在此方法中做一些权限的校验。如果程序员决定该拦截器对请求进行拦截处理后还要调用其他的拦截器,或者是业务处理器去进行处理,则返回true;如果程序员决定不需要再调用其他组件去处理请求,则返回false.
(2)postHandler():这个方法在业务处理器处理请求之后,渲染视图之前调用。在此方法中可以对ModelAndView中的模型和视图进行处理。
(3)afterCompletion():这个方法在DispatcherServlet完全处理完请求后被调用,可以在该方法中进行一些资源清理的操作。
三、实现拦截器步骤
1、实现接口:HandlerInterceptor
2、重写三个方法
@Component public class MyInterceptor implements HandlerInterceptor { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println(" MyInterceptor==>preHandle " ); return true; } public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception { System.out.println(" MyInterceptor==>postHandle " ); } public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception { System.out.println(" MyInterceptor==>afterCompletion " ); } }
3、在springmvc.xml配置文件中,装配拦截器
<!-- 装配拦截器--> <mvc:interceptors> <ref bean="myInterceptor"></ref> </mvc:interceptors>