返回顶部
首页 > 资讯 > 精选 >SpringBoot实现过滤器拦截器的耗时实例对比分析
  • 712
分享到

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

2023-07-02 13:07:21 712人浏览 独家记忆
摘要

本篇内容介绍了“SpringBoot实现过滤器拦截器的耗时实例对比分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!过滤器的方式这种方式简单

本篇内容介绍了“SpringBoot实现过滤器拦截器的耗时实例对比分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

过滤器的方式

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

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

创建一个类 实现 filter接口

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

  • doFilter:可以对request和response进行<u>预处理</u>其中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);    }}

结果

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

总结

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

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

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

拦截器的方式

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

拦截器的介绍

话不说多 直接上代码

创建拦截器

@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);     }}

注册拦截器

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

@Configurationpublic class springMVCConfig implements WEBmvcConfigurer {    @Resource    private LogInterceptor logInterceptor;        @Override    public void addInterceptors(InterceptorReGIStry registry) {        registry                .addInterceptor(logInterceptor)                .addPathPatterns("/**")// 对那些接口拦截                .excludePathPatterns("/login");// 对哪些接机口放行        WebMvcConfigurer.super.addInterceptors(registry);    }}

测试结果

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

“SpringBoot实现过滤器拦截器的耗时实例对比分析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: SpringBoot实现过滤器拦截器的耗时实例对比分析

本文链接: https://lsjlt.com/news/342082.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作