SpringBoot实现过滤器拦截器的耗时实例对比分析(springboot,开发技术)

时间:2024-04-29 18:40:47 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

过滤器的方式

这种方式简单点 但是可配置性不高

注意:一定得扫描到spring容器中

创建一个类 实现 filter接口

  • init:该方法是对filter对象进行初始化的方法,仅在容器初始化filter对象结束后被调用一次,参数FilterConfig可以获得filter的初始化参数;

  • doFilter:可以对request和response进行<u>预处理</u>其中FilterChain可以将处理后的request和response对象传递到过滤链上的下一个资源。

  • destroy():该方法在容器销毁对象前被调用。

importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importorg.springframework.stereotype.Component;importjavax.servlet.*;importjavax.servlet.http.HttpServletRequest;importjava.io.IOException;@ComponentpublicclassLogFilterimplementsFilter{privatestaticfinalLoggerLOG=LoggerFactory.getLogger(LogFilter.class);@Overridepublicvoidinit(FilterConfigfilterConfig)throwsServletException{}@OverridepublicvoiddoFilter(ServletRequestservletRequest,ServletResponseservletResponse,FilterChainfilterChain)throwsIOException,ServletException{//打印请求信息HttpServletRequestrequest=(HttpServletRequest)servletRequest;LOG.info("-------------LogFilter开始-------------");LOG.info("请求地址:{}{}",request.getRequestURL().toString(),request.getMethod());LOG.info("远程地址:{}",request.getRemoteAddr());longstartTime=System.currentTimeMillis();filterChain.doFilter(servletRequest,servletResponse);LOG.info("-------------LogFilter结束耗时:{}ms-------------",System.currentTimeMillis()-startTime);}}

结果

SpringBoot实现过滤器拦截器的耗时实例对比分析

总结

1.过滤器用来实现通用的功能,减少代码冗余,提高可维护性;

2.一个过滤器可以配置给多个资源使用(编码过滤器);

3.一个资源也可以配置多个过滤器,按照配置顺序调用。

拦截器的方式

如果不懂 请先看了 介绍再来

拦截器的介绍

话不说多 直接上代码

创建拦截器

/***拦截器:Spring框架特有的,常用于登录校验,权限校验,请求日志打印/login*@author:look-word*2022-06-2613:55**/@ComponentpublicclassLogInterceptorimplementsHandlerInterceptor{privatestaticfinalLoggerLOG=LoggerFactory.getLogger(LogInterceptor.class);@OverridepublicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsException{//打印请求信息LOG.info("-------------LogInterceptor开始-------------");LOG.info("请求地址:{}{}",request.getRequestURL().toString(),request.getMethod());LOG.info("远程地址:{}",request.getRemoteAddr());longstartTime=System.currentTimeMillis();request.setAttribute("requestStartTime",startTime);returntrue;}@OverridepublicvoidpostHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler,ModelAndViewmodelAndView)throwsException{longstartTime=(Long)request.getAttribute("requestStartTime");LOG.info("-------------LogInterceptor结束耗时:{}ms-------------",System.currentTimeMillis()-startTime);}}

注册拦截器

把我们的拦截器 注册到 拦截器链中

/***@author:look-word*2022-06-2614:03**/@ConfigurationpublicclassSpringMvcConfigimplementsWebMvcConfigurer{@ResourceprivateLogInterceptorlogInterceptor;/***注册拦截器*@paramregistry*/@OverridepublicvoidaddInterceptors(InterceptorRegistryregistry){registry.addInterceptor(logInterceptor).addPathPatterns("/**")//对那些接口拦截.excludePathPatterns("/login");//对哪些接机口放行WebMvcConfigurer.super.addInterceptors(registry);}}

测试结果

SpringBoot实现过滤器拦截器的耗时实例对比分析

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:SpringBoot实现过滤器拦截器的耗时实例对比分析的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:python打印日志实例分析下一篇:

4 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18