过滤器的方式这种方式简单点 但是可配置性不高
注意:一定得扫描到spring容器中
创建一个类 实现 filter接口
init:该方法是对filter对象进行初始化的方法,仅在容器初始化filter对象结束后被调用一次,参数filterconfig可以获得filter的初始化参数;
dofilter:可以对request和response进行88f336217b3880082bb52d49b5de60a5预处理04e11139013d3ca73accef66348e2e58。其中filterchain可以将处理后的request和response对象传递到过滤链上的下一个资源。
destroy():该方法在容器销毁对象前被调用。
import org.slf4j.logger;import org.slf4j.loggerfactory;import org.springframework.stereotype.component;import javax.servlet.*;import javax.servlet.http.httpservletrequest;import java.io.ioexception;@componentpublic class logfilter implements filter { private static final logger log = loggerfactory.getlogger(logfilter.class); @override public void init(filterconfig filterconfig) throws servletexception { } @override public void dofilter(servletrequest servletrequest, servletresponse servletresponse, filterchain filterchain) throws ioexception, servletexception { // 打印请求信息 httpservletrequest request = (httpservletrequest) servletrequest; log.info("------------- logfilter 开始 -------------"); log.info("请求地址: {} {}", request.getrequesturl().tostring(), request.getmethod()); log.info("远程地址: {}", request.getremoteaddr()); long starttime = system.currenttimemillis(); filterchain.dofilter(servletrequest, servletresponse); log.info("------------- logfilter 结束 耗时:{} ms -------------", system.currenttimemillis() - starttime); }}
结果
总结
1.过滤器用来实现通用的功能,减少代码冗余,提高可维护性;
2.一个过滤器可以配置给多个资源使用(编码过滤器);
3.一个资源也可以配置多个过滤器,按照配置顺序调用。
拦截器的方式如果不懂 请先看了 介绍再来
拦截器的介绍
话不说多 直接上代码
创建拦截器
/** * 拦截器:spring框架特有的,常用于登录校验,权限校验,请求日志打印 /login * @author : look-word * 2022-06-26 13:55 **/@componentpublic class loginterceptor implements handlerinterceptor { private static final logger log = loggerfactory.getlogger(loginterceptor.class); @override public boolean prehandle(httpservletrequest request, httpservletresponse response, object handler) throws exception { // 打印请求信息 log.info("------------- loginterceptor 开始 -------------"); log.info("请求地址: {} {}", request.getrequesturl().tostring(), request.getmethod()); log.info("远程地址: {}", request.getremoteaddr()); long starttime = system.currenttimemillis(); request.setattribute("requeststarttime", starttime); return true; } @override public void posthandle(httpservletrequest request, httpservletresponse response, object handler, modelandview modelandview) throws exception { long starttime = (long) request.getattribute("requeststarttime"); log.info("------------- loginterceptor 结束 耗时:{} ms -------------", system.currenttimemillis() - starttime); }}
注册拦截器
把我们的拦截器 注册到 拦截器链中
/** * @author : look-word * 2022-06-26 14:03 **/@configurationpublic class springmvcconfig implements webmvcconfigurer { @resource private loginterceptor loginterceptor; /** * 注册拦截器 * @param registry */ @override public void addinterceptors(interceptorregistry registry) { registry .addinterceptor(loginterceptor) .addpathpatterns("/**")// 对那些接口拦截 .excludepathpatterns("/login");// 对哪些接机口放行 webmvcconfigurer.super.addinterceptors(registry); }}
测试结果
以上就是springboot实现过滤器拦截器的耗时实例对比分析的详细内容。