拦截器interview

187 阅读2分钟

拦截器不依赖与Web容器(Tomcat,JBoss等),可以在非Web项目中使用,以及其他 拦截器SpringMVC提供

Spring-过滤器VS拦截器的区别

过滤器&拦截器的区别
过滤器基于函数回调实现,拦截器基于反射(动态代理)实现
使用范围不同,过滤器依赖与Tomcat等web容器,拦截器是Spring的一个组件,由Spring管理,可单独使用
触发时机不同,过滤器是在进入Tomcat容器之后,Sevlet之前,拦截器是在Servlet之后,Controler之前
拦截捷的请求范围不同
拦截器可以获取IOC容器中的各个bean,而过滤器不能

blog.csdn.net/weixin_4612…

拦截器是用什么实现的

拦截器使用动态代理

什么是拦截器

Springboot拦截器实现

  1. 实现HanderIntercepter接口

public class LoginInterceptor implements HandlerInterceptor {

    private Logger logger = LoggerFactory.getLogger(LoginInterceptor.class);

    /**
     * 该方法在控制器处理请求方法前执行,其返回值表示是否中断后续操作,返回 true 表示继续向下执行,返回 false 表示中断后续操作。
     *
     * @param request
     * @param response
     * @param handler
     * @return
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        logger.info("preHandle...........");
        return true;
    }

    /**
     * 该方法在控制器处理请求方法调用之后、解析视图之前执行,可以通过此方法对请求域中的模型和视图做进一步修改。
     *
     * @param request
     * @param response
     * @param handler
     * @param modelAndView
     * @throws Exception
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        logger.info("postHandle...........");
    }

    /**
     * 该方法在视图渲染结束后执行,可以通过此方法实现资源清理、记录日志信息等工作。
     *
     * @param request
     * @param response
     * @param handler
     * @param ex
     * @throws Exception
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        logger.info("afterCompletion...........");
    }
}
  1. 实现WebMvcConfigura接口,注册拦截器
@Configuration
public class MyWebMvcConfiguration implements WebMvcConfigurer {
    
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**");
    }
}

拦截器只对action请求起作用(什么是action请求)

参考 www.jb51.net/article/233…