SpringBoot实现过滤器拦截器的耗时实例对比分析
导读:本文共2309.5字符,通常情况下阅读需要8分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 过滤器的方式这种方式简单点 但是可配置性不高注意:一定得扫描到spring容器中创建一个类 实现 filter接口init:该方法是对filter对象进行初始化的方法,仅在容器初始化filter对象结束后被调用一次,参数FilterConfig可以获得filter的初始化参数;doFilter:可以对request和response进行<u>预处理&... ...
目录
(为您整理了一些要点),点击可以直达。过滤器的方式
这种方式简单点 但是可配置性不高
注意:一定得扫描到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);}}
结果
总结
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);}}
测试结果
</div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
SpringBoot实现过滤器拦截器的耗时实例对比分析的详细内容,希望对您有所帮助,信息来源于网络。