- Interceptor在springboot2.x版本的快速入门
- 实现HandlerInterceptor的接口,并重载它的三个方法:preHandle、postHandle、afterCompletion。
-
1 1 /** 2 2 * 登陆拦截器 3 3 * @author HILL 4 4 * 5 5 */ 6 6 public class LoginInterceptor implements HandlerInterceptor { 7 7 8 8 @Override 9 9 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) 10 10 throws Exception { 11 11 return HandlerInterceptor.super.preHandle(request, response, handler); 12 12 } 13 13 14 14 @Override 15 15 public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, 16 16 ModelAndView modelAndView) throws Exception { 17 17 HandlerInterceptor.super.postHandle(request, response, handler, modelAndView); 18 18 } 19 19 20 20 @Override 21 21 public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) 22 22 throws Exception { 23 23 HandlerInterceptor.super.afterCompletion(request, response, handler, ex); 24 24 } 25 25 }
2.加载过滤器的配置类,并设置过滤路径路径
这里的意思是:添加一个MyInterceptor拦截器,拦截路径为/properties。(注意不要忘记在配置类上加@Configuration注解)
@Configuration public class MyWebMvcConfigurer implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new MyInterceptor()).addPathPatterns("/properties"); WebMvcConfigurer.super.addInterceptors(registry); } }
- 拦截器三个方法:preHandle、postHandle、afterCompletion的性质。
- 因为springboot就是类似一个配置好的ssm框架,所以mvc层就是springmvc,所以这里的性质也是一样的。
preHandle:在进入controller之前进行拦截并决定是否放行。
postHandle:在controller处理完请求后,返回视图前执行。当controller发生异常时不执行该方法。
afterCompletion:返回视图后,一般用于资源的回收,因为发生异常该方法也会执行
- Interceptor的拦截性质
- 因为springmvc的入口就是dispatcherServlet,所有操作都是基于这个入口。所以Interceptor只能拦截springmvc中的RequestMapping,并不能拦截Servlet
- 需要拦截servlet时要定义filter进行过滤。
- 多个拦截器是的执行顺序,preHandle是在configure类里先添加先执行。postHandle、afterCompletion则依次按顺序由先进后出的规则执行。