为了账号安全,请及时绑定邮箱和手机立即绑定

spring boot拦截器与过滤器

标签:
SpringBoot

过滤器
拦截器
对比

过滤器Filter

过滤器基于servlet

fileter类
public class LogCostFilter implements Filter {    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {        long start = System.currentTimeMillis();        //这是过程链
        filterChain.doFilter(servletRequest,servletResponse);
        System.out.println("Filter1: Execute cost="+(System.currentTimeMillis()-start));
    } 
    @Override
    public void destroy() {
 
    }
}
配置方式

通过文件配置方式

@Configurationpublic class FilterConfig { 
    @Bean
    public FilterRegistrationBean registFilter() {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(new LogCostFilter());
        registration.addUrlPatterns("/*");
        registration.setName("LogCostFilter");
        registration.setOrder(1);        return registration;
    }
}

通过注释方式

//在过滤器类上面添加注释@WebFilter(urlPatterns = "/*", filterName = "logFilter2")public class LogCostFilter2 implements Filter {//在主类上添加@ServletComponentScan("com.liu.spring_boot_mybatis.filter")//注意最后不要加.*这里就是扫描包public class App  {
结果

启动项目 刷新网页

webp

控制台输出


拦截器Intercepter

Intercepter类
public class LogCostInterceptor implements HandlerInterceptor {    long start = System.currentTimeMillis();    @Override
    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
        start = System.currentTimeMillis();        return true;
    }    @Override
    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
        System.out.println("Interceptor cost="+(System.currentTimeMillis()-start));
    }    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
    }
}

代码说明

preHandle是请求执行前执行的,postHandler是请求结束执行的,但只有preHandle方法返回true的时候才会执行,afterCompletion是视图渲染完成后才执行,同样需要preHandle返回true,该方法通常用于清理资源等工作。

配置方式
@Configurationpublic class InterceptorConfig extends WebMvcConfigurerAdapter {    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LogCostInterceptor()).addPathPatterns("/**");        super.addInterceptors(registry);
    }
}



作者:cccccttttyyy
链接:https://www.jianshu.com/p/7c126f00a749


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消