拦截器、过滤器


拦截器

概念:反射(动态代理)实现,对每个接口的请求进行拦截,比如校验接口请求的token是否有效。

springboot自定义拦截器,继承HandlerInterfaceAdapter

@Component
public class AuthorityInterceptor extends HandlerInterceptorAdapter {
    private static final Logger logger = LoggerFactory.getLogger(AuthorityInterceptor.class);
 
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        logger.info("进入到拦截器中:preHandle() 方法");
        System.out.println(request.getServletPath());
        return true;
    }
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        logger.info("进入到拦截器中:postHandle() 方法中");
        System.out.println(request.getRequestURI());
    }
 
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        logger.info("进入到拦截器中:afterCompletion() 方法中");
        System.out.println(request.getServletPath());
    }
}
————————————————
版权声明:本文为CSDN博主「苍白的咏叹调」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/kuishao1314aa/article/details/109777304

 注册拦截器,可以继承WebMvcConfigurerAdapter或实现 WebMvcConfigurer

@Configuration
public class InterceptorAdapterConfig extends WebMvcConfigurerAdapter {
    @Autowired
    private AuthorityInterceptor authorityInterceptor;
 
    @Override
    public void addInterceptors(InterceptorRegistry registry)
    {
        //注册自己的拦截器并设置拦截的请求路径
        registry.addInterceptor(authorityInterceptor).addPathPatterns("/**");
        super.addInterceptors(registry);
    }

过滤器

 概念:函数回调实现,过滤请求,容器初始化时候使用。

拦截器和过滤器区别:

1. 过滤器只是在容器初始化时候使用,拦截器每个接口调用的时候都会使用。

2. 过滤器依赖servlet容器 , 拦截器不依赖servlet。

3. 过滤器需要每次filter.doFilter方法去调用,拦截器是方法执行前 中 后调用

拦截器和过滤器执行顺序:

过滤前->拦截前->Action处理->拦截后->过滤后

参考文章:https://blog.csdn.net/reggergdsg/article/details/52962774