springboot的拦截器Interceptor的性质

时间:2025-03-18 14:33:56
  • Interceptor在springboot2.x版本的快速入门
  1. 实现HandlerInterceptor的接口,并重载它的三个方法:preHandle、postHandle、afterCompletion。
  2.  1 /**
    2 * 登陆拦截器
    3 * @author HILL
    4 *
    5 */
    6 public class LoginInterceptor implements HandlerInterceptor {
    7
    8 @Override
    9 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
    10 throws Exception {
    11 return HandlerInterceptor.super.preHandle(request, response, handler);
    12 }
    13
    14 @Override
    15 public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
    16 ModelAndView modelAndView) throws Exception {
    17 HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
    18 }
    19
    20 @Override
    21 public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
    22 throws Exception {
    23 HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    24 }
    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的性质。
  1. 因为springboot就是类似一个配置好的ssm框架,所以mvc层就是springmvc,所以这里的性质也是一样的。

    preHandle:在进入controller之前进行拦截并决定是否放行。

    postHandle:在controller处理完请求后,返回视图前执行。当controller发生异常时不执行该方法。

    afterCompletion:返回视图后,一般用于资源的回收,因为发生异常该方法也会执行

  • Interceptor的拦截性质
  1. 因为springmvc的入口就是dispatcherServlet,所有操作都是基于这个入口。所以Interceptor只能拦截springmvc中的RequestMapping,并不能拦截Servlet
  2. 需要拦截servlet时要定义filter进行过滤。
  3. 多个拦截器是的执行顺序,preHandle是在configure类里先添加先执行。postHandle、afterCompletion则依次按顺序由先进后出的规则执行。